Serilog - 单独的信息文件,使用 appsetting.json 的例外

Jam*_*123 2 c# serilog .net-core serilog-exceptions

我正在使用滚动将所有日志写入一个文件。但我想通过Information,WarningExceptions滚动文件将它们分开。

我当前的配置是这样的

     "Serilog": {
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}",
          "pathFormat": "logs\\log-{Hour}.log",
          "rollOnFileSizeLimit ": true,
          "retainedFileCountLimit ": null,
          "rollingInterval": "Hour",
          "fileSizeLimitBytes": 5000000
        }
      }
    ]
  },
Run Code Online (Sandbox Code Playgroud)

班级

public ILogger GetLogger()
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        _logger =
            new LoggerConfiguration()
                .ReadFrom.Configuration(configuration)
                .CreateLogger();

        return _logger ;
    }
Run Code Online (Sandbox Code Playgroud)

Cai*_*ete 5

在 Serilog 中,您可以通过子记录器Serilog.Sinks.Map进行这种分离。

您无法通过配置整个管道appsetting.json,但可以appsetting.json使用您选择的自定义键轻松配置每个文件的路径,并在通过代码配置日志管道时使用它。


使用子记录器并对其应用了过滤器的示例:

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Logger(c =>
        c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Debug)
            .WriteTo.File("Debug.log"))
    .WriteTo.Logger(c =>
        c.Filter.ByIncludingOnly(e => e.Level == LogEventLevel.Error)
            .WriteTo.File("Error.log"))
    .CreateLogger();

Log.Debug("This goes to Debug.log only");
Log.Error("This goes to Error.log only");

Log.CloseAndFlush();
Run Code Online (Sandbox Code Playgroud)

使用Serilog.Sinks.Map将每个映射LogEventLevel到不同文件的示例。

Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Verbose()
    .WriteTo.Map(evt => evt.Level, (level, wt) => wt.File($"{level}.log"))
    .CreateLogger();

Log.Debug("This goes to Debug.log only");
Log.Error("This goes to Error.log only");

Log.CloseAndFlush();
Run Code Online (Sandbox Code Playgroud)