Serilog:输出窗口和控制台之间单独的日志记录级别

问题描述 投票:0回答:1

我只想将调试消息记录到输出窗口,例如 Debug.WriteLine。简单地说 - 通过 serilog 模拟 Debug.WriteLine,因此输出窗口应该只记录调试级别,其他接收器应该忽略它。有可能实现吗?可以通过json配置来实现吗?鉴于以下简单配置,我应该添加什么来实现这一目标:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Debug",
      "Override": {
        "Microsoft": "Warning",
        "Microsoft.Hosting": "Information",
        "System": "Warning",
        "Serilog.AspNetCore": "Warning"
      }
    },
    "Filter": [],
    "WriteTo": [
      {
        "Name": "Debug",
        "Args": {

          "outputTemplate": "{Timestamp:HH:mm:ss.fff} [{ProcessId}:{ThreadId,-2}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
        }
      },
      {
        "Name": "Console",
        "Args": {
          "restrictedToMinimumLevel": "Information",
          "outputTemplate": "{Timestamp:HH:mm:ss.fff} [{ProcessId}:{ThreadId,-2}] [{Level:u3}] [{SourceContext}] {Message:lj}{NewLine}{Exception}"
        }
      }
    ],
    "Enrich": [
      "FromLogContext",
      "WithExceptionDetails",
      "WithDefaultDestructurers",
      "WithProcessId",
      "WithThreadId",
      "WithMachineName",
      "WithEnvironmentUserName"
    ]
  }

}

提前致谢。

.net logging serilog serilog-filter
1个回答
0
投票

要开始将输出记录到 Serilog,您需要添加类似的内容..

 Serilog.Log.Logger.Debug("*************************** Read DailyFile Started *****************************");

要过滤日志,您可以在 LoggerConfiguration() 中提及,也可以在 Appsettings.json 中提及。您可以根据 LogLevel 或 EventType 或任何其他自定义属性过滤日志。

请确保安装了以下软件包。

  • 串行记录
  • Serilog.Sinks.调试
  • Serilog.Expressions
  • Serilog.设置.配置
  • 安装其他 Enrichers 软件包,或者您可以从 Appsettings.json 文件中删除。

程序.cs

  var configFile = new ConfigurationBuilder().SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
                    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                    .Build();
    
    Log.Logger = new LoggerConfiguration()
                .MinimumLevel.Debug()
                .ReadFrom.Configuration(configFile)
                .WriteTo.Console()
                //.WriteTo.Debug()
                .WriteTo.Logger(lc => lc
                    .Filter.ByIncludingOnly(l => l.Level == LogEventLevel.Debug)
                    .WriteTo.Debug())
                .WriteTo.Logger(lc => lc
                    .Filter.ByExcluding(l => l.Level == LogEventLevel.Information || l.Level == LogEventLevel.Debug || l.Level == LogEventLevel.Warning || l.Properties["EventType"].Equals("System"))
                    .WriteTo.File(Directory.GetParent(AppContext.BaseDirectory).FullName + @"\\Logs\\log-Information-.txt", rollingInterval: RollingInterval.Day))
                .WriteTo.Logger(lc => lc
                    .Filter.ByIncludingOnly(l => l.Level == LogEventLevel.Error || l.Level == LogEventLevel.Fatal)
                    .WriteTo.File(Directory.GetParent(AppContext.BaseDirectory).FullName + @"\\Logs\\log-Error-.txt", rollingInterval: RollingInterval.Day))
                .CreateLogger();

     Serilog.Log.Logger.Debug("*************************** Read DailyFile Started *****************************");

应用程序设置.json

   "Serilog": {
      "Using": [ "Serilog.Sinks.MSSqlServer", "Serilog.Sinks.Console", "Serilog.Sinks.Debug", "Serilog.Sinks.File", "Serilog.Enrichers.Environment", "Serilog.Enrichers.Thread", "Serilog.Exceptions", "Serilog.Expressions" ],
      "MinimumLevel": "Debug",
      "WriteTo": [
        {
          "Name": "Console",
          "Args": {
            "outputTemplate": "[{Timestamp:yyyy:MM:dd hh:mm:ss} {CorrelationId} {Level:u3}] {Message:lj}{NewLine}{Exception}",
            "restrictedToMinimumLevel": "Debug"
          }
        },
        {
          "Name": "Debug",
          "Args": {
            "outputTemplate": "[{Timestamp:yyyy:MM:dd hh:mm:ss} {CorrelationId} {Level:u3}] {Message:lj}{NewLine}{Exception}",
            "restrictedToMinimumLevel": "Debug",
            "filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "Level = 'Debug'" //"StartsWith(SourceContext,'Microsoft.EntityFrameworkCore.ChangeTracking')",
                }
              }
            ]
          }
        },
}

VS 上的输出窗口:

© www.soinside.com 2019 - 2024. All rights reserved.