Serilog - 使用appsetting.json为信息和异常情况分别建立文件。

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

我正在使用滚动方式将所有日志写入一个文件。但我想通过 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
        }
      }
    ]
  },

阶层

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

        return _logger ;
    }
c# .net-core serilog serilog-exceptions
1个回答
0
投票

我还没有测试过,但根据文档推断:你可以尝试在你的appconf文件中创建2个部分。

  "ErrorLog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}",
          "pathFormat": "logs\\ Errorlog-{Hour}.log",       
          "rollingInterval": "Hour",
          "restrictedToMinimumLevel": "Error"
        }
      }
    ]
  },
  "InfoLog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": "Debug",
    "WriteTo": [
      {
        "Name": "RollingFile",
        "Args": {
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level}] {Message}{NewLine}{Exception}",
          "pathFormat": "logs\\ Infolog-{Hour}.log",
          "rollingInterval": "Hour",
          "restrictedToMinimumLevel": "Information"
        }
      }
    ]
  }

并创建2个记录器。

    var configuration = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json")
        .Build();


        var errorSection = configuration.GetSection("ErrorLog");
        var infoSection = configuration.GetSection("InfoLog");


        _errorlog = new LoggerConfiguration()
            .ReadFrom
            .ConfigurationSection(errorSection)
            .CreateLogger();

        _infolog = new LoggerConfiguration()
            .ReadFrom
            .ConfigurationSection(infoSection)
            .CreateLogger();

0
投票

在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();

例如使用 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();
© www.soinside.com 2019 - 2024. All rights reserved.