guibranco / CrispyWaffle

🧰 🛠️ Crispy Waffle project - toolkit for .NET projects
https://guibranco.github.io/CrispyWaffle/
MIT License
21 stars 20 forks source link

[FEATURE] Add `SEQ` log provider #216

Open guibranco opened 11 months ago

guibranco commented 11 months ago

Description

We need to enhance our logging infrastructure by integrating support for SEQ, a log server that provides structured log management and querying. To achieve this, we will create a new project, CrispyWaffle.Seq, which will include classes for forwarding logs to a SEQ server using HTTP endpoints. This feature will allow us to effectively handle and route logs to SEQ, leveraging its structured logging capabilities.

Problem Statement

Proposed Solution

Implementation Steps

  1. Create CrispyWaffle.Seq Project:

    • Initialize a new project and NuGet package named CrispyWaffle.Seq.
  2. Implement SeqLogProvider Class:

    • Create a class SeqLogProvider that implements the ILogProvider interface. This class will handle the configuration and setup for logging to SEQ.
    • Ensure the SeqLogProvider can be configured with the SEQ server URL and other relevant settings.
    • Example:

      public class SeqLogProvider : ILogProvider
      {
       private readonly SeqConnector _connector;
      
       public SeqLogProvider(SeqConnector connector) => _connector = connector;
      
       // Implementation of ILogProvider methods
      }
  3. Implement SeqBatchLogAdapter Class:

    • Create a class SeqBatchLogAdapter that implements the ICategorizedLogAdapter interface. This class will manage batch logging and forward messages to the SEQ server.
    • Implement batch configuration options such as timeout and throughput to optimize log forwarding.
    • Example:

      public class SeqBatchLogAdapter : ICategorizedLogAdapter
      {
       private readonly SeqConnector _connector;
       private readonly TimeSpan _batchTimeout;
       private readonly int _batchSize;
      
       public SeqBatchLogAdapter(SeqConnector connector, TimeSpan batchTimeout, int batchSize)
       {
           _connector = connector;
           _batchTimeout = batchTimeout;
           _batchSize = batchSize;
       }
      
       // Implementation of ICategorizedLogAdapter methods
      }
  4. HTTP Forwarding to SEQ:

    • Ensure that both SeqLogProvider and SeqBatchLogAdapter can forward log messages to the SEQ server using HTTP.
    • Utilize SEQ’s ingestion API or .NET libraries to handle HTTP communication.
  5. Batch Configurability:

    • Implement configurable batch behavior in SeqBatchLogAdapter, allowing settings for timeout and throughput to manage log forwarding efficiently.
  6. Testing:

    • Test the integration to ensure that logs are correctly forwarded to SEQ and that batch settings work as expected. Validate log delivery, batching behavior, and error handling.
  7. Documentation:

    • Document the new CrispyWaffle.Seq project, including configuration instructions, usage examples, and any required dependencies.

Additional Notes

Laxynium commented 11 months ago

Hi, could I take this one?

guibranco commented 11 months ago

@Laxynium sure, of course. Let me know if you need more explanation on the task!

guibranco commented 10 months ago

@Laxynium any progress on this? Do you need any help?

dasingh92 commented 8 months ago

hey @guibranco I'd like to work on this task.

guibranco commented 8 months ago

Hi, @dasingh92, I assigned it to you!

guibranco commented 7 months ago

@dasingh92 Hi, I'm just wondering if you made some progress on this or need help!