0

我已经在 .net core 中实现了 Serilog,我想为每种日志类型实现多个日志文件。例如 Error.log 文件将只包含错误,Trace.log 文件将只包含 Trace 日志,Warning.log 将只包含警告消息而不包含错误消息。我使用了 Serilog.Sinks.RollingFile 和restrictedToMinimumLevel,我能够生成多个文件,但由于restrictedToMinimumLevel,它也记录在定义的级别之上。是否有任何选项/方法来设置logOnlyLevel 之类的东西。我可以使用过滤器,但有没有更好的选择。

"Serilog": {
"Using": ["Serilog.Sinks.RollingFile"],
"MinimumLevel": {
    "Default": "Verbose",
    "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
    }
},
"WriteTo": [{
        "Name": "RollingFile",
        "Args": {
            "pathFormat": "Logs/Information.txt",
            "rollingInterval": "Day",
            "fileSizeLimitBytes": "2000000",
            "retainedFileCountLimit": "10",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}|{EventId}|{Message}|{Scope} {NewLine}",
            "restrictedToMinimumLevel": "Information"
        }
    }, {
        "Name": "RollingFile",
        "Args": {
            "pathFormat": "Logs/Warning.txt",
            "rollingInterval": "Day",
            "fileSizeLimitBytes": "2000000",
            "retainedFileCountLimit": "10",
            "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz}|{EventId}|{Message}|{Scope} {NewLine}",
            "restrictedToMinimumLevel": "Warning"
        }
    }
}
4

1 回答 1

1

来自Serilog 多个文件 appsettings.json的线程。经过一段时间的错误,我的发现由于缺乏有关 Serilog 的文档而重试并几乎放弃。他们在 GitHub 上有所作为:https ://github.com/serilog/serilog-filters-expressions/issues/27 。几乎每个线程都得出相同的结论,即您必须创建一个 SUBLOGGER。这是我的实现。对于此实现,您需要以下插件:

  • Serilog 过滤器
  • Serilog 水槽
  • Serilog 异步

    "Serilog": {
    "Using": [ "Serilog.Sinks.File" ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo:Information": { //this name here can be changed
      "Name": "Logger", //this name here is essential
      "Args": {
        "configureLogger": {
          "Filter": [
            {
              "Name": "ByIncludingOnly",
              "Args": {
                "expression": "@Level = 'Information'"
              }
            }
          ],
          "WriteTo": [
            {
              "Name": "Async", //i use async plugin from serilog
              "Args": {
                "configure": [
                  {
                    "Name": "File",
                    "Args": {
                      "path": "Logs/Log_.txt",
                      "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
                      "rollingInterval": "Day",
                      "retainedFileCountLimit": 7
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    },
    
于 2020-05-28T14:00:46.133 回答