簡體   English   中英

在同一個 class + 依賴注入中為不同的目的使用不同的 Serilog 接收器

[英]Use Different Serilog Sinks for different purposes in the same class + dependency injection

我需要使用 Serilog 將一些數據寫入 elasticsearch,但我想將所有其他日志寫入不同的接收器,如控制台。 這可能嗎? 我應該如何修改 main 和 CreateHostBuilder 方法來實現這一點?

我想要的是這樣的:

 public class Processor
   {
      private readonly ILogger<Processor> _logger;

      public Processor(ILogger<Processor> logger)
      {
         _logger = logger;
      }

      public void Process(object message1, string message2, string message 3)
      {
          _logger.LogInformation("processor started);
          _logger.LogInfomration("{@message1}", message1);//want this use a console sink
          _logger.LogInfomration("{@message2}", message2);//want this use a eleasticsearch sink
          _logger.LogInfomration("{@message3}", message3);//want this use a console sink
      }

我當前的主要方法和 CreateHostBuilder 方法是:

  public static async Task Main(string[] args)
  {
     Log.Logger = new LoggerConfiguration()
        .WriteTo.Elasticsearch(
           options: new ElasticsearchSinkOptions(new 
           Uri("http://localhost:9200"))
           {
              AutoRegisterTemplate = true,
           

   IndexFormat = $" 
       {Assembly.GetExecutingAssembly().GetName().Name.ToLower().Replace(".", 
        "-")}-" + $"{DateTime.UtcNow:MM-dd-yyyy}",
               })
            .CreateLogger();

         await CreateHostBuilder(args)
            .Build()
            .RunAsync()
            .ConfigureAwait(false);

         Log.CloseAndFlush();
      }



 public static IHostBuilder CreateHostBuilder(string[] args, StringBuilder configLog) =>
         CreateDefaultBuilder(args)
            .UseSerilog();
            

您可以使用.WriteTo.Conditional ,例如根據模板文本進行區分:

logOpts.WriteTo.Conditional(le => le.MessageTemplate.Text.Contains("message2"),
   cfg => cfg.Elasticsearch(....));

或者考慮將Serilog.Filters.Expressionssub- loggers 一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM