Skip to content

[FEATURE] Add SEQ log provider #216

@guibranco

Description

@guibranco

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

  • Current Issue: Our existing logging setup does not support SEQ, limiting our ability to use its advanced log management features. We need a mechanism to forward logs to SEQ efficiently.
  • Impact: Without SEQ integration, we miss out on features like centralized log aggregation, querying, and visualization offered by SEQ.

Proposed Solution

  • Create CrispyWaffle.Seq Project:
    • Develop a new project and NuGet package named CrispyWaffle.Seq that includes classes for integrating with SEQ.
    • Implement classes that will forward log messages to a SEQ server via HTTP.

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

  • Review SEQ’s official documentation for details on their HTTP ingestion API and best practices.
  • Ensure that the new project adheres to best practices for logging and error handling.

Metadata

Metadata

Assignees

No one assigned

    Labels

    .NETPull requests that update .net codeenhancementNew feature or requestgitautoGitAuto label to trigger the app in a issue.good first issueGood for newcomershacktoberfestParticipation in the Hacktoberfest eventhelp wantedExtra attention is neededlog

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions