Serilog 记录器接收器的最小和最大级别

use*_*479 4 c# serilog

我们发现restrictedToMinimumLevelserilog中存在属性,但它是否也支持最大级别属性?

之前我们使用过NLog具有最小和最大日志记录级别(https://github.com/NLog/NLog/wiki/Configuration-file#rules)。
我们希望从debug to information控制台、information to warning文件和errors数据库中登录。
我们可以使用 appsettings.json 来做到这一点吗?
我们正在使用 dotnet core 2.2。
任何帮助是极大的赞赏。

Ale*_*aev 6

答案有点晚了,但我只是有同样的问题并找到了解决方案。也许这对像我这样的人会有帮助。

在这种情况下,Serilog.Expressions可以使用子记录器与包的组合。Sublogger 是主记录器中的一个新记录器,您可以为其设置过滤规则。例如,此配置表示,DebugInformation日志将写入控制台接收器,并且InformationWarning级别的日志将写入 SqlServer 接收器。

这是表达式语言的参考:https ://github.com/serilog/serilog-expressions#language-reference 。

JSON 配置将如下所示:

{
  "Serilog": {
    //... serilog config
    "WriteTo": [
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "@l in ['Debug', 'Information']"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "Console",
                "Args": {
                  //Console sink config
                }
              }
            ],
           }
         }
      },
      {
        "Name": "Logger",
        "Args": {
          "configureLogger": {
            "Filter": [
              {
                "Name": "ByIncludingOnly",
                "Args": {
                  "expression": "@l in ['Information', 'Warning']"
                }
              }
            ],
            "WriteTo": [
              {
                "Name": "MSSqlServer",
                "Args": {
                  //MSSqlServer sink config
                }
              }
            ]
     
Run Code Online (Sandbox Code Playgroud)