每个级别的Serilog不同的日志文件

时间:2019-09-02 03:22:29

标签: logging .net-core serilog

我希望我的日志根据其级别保存在不同的文件夹中。我希望此配置完全通过配置文件而不是hard-coded configs来完成,因为将来可能会更改。在NLog configuration file中执行此操作非常简单,但是我没有找到如何在Serilog中进行高级日志配置。有什么建议吗?

目前我有这个:

"Serilog": {
    "Using": [ "Serilog.Sinks.Console" ],
    "MinimumLevel": "Information",
    "Override": {
      "Microsoft": "Warning",
      "System": "Warning"
    },
    "WriteTo": [
      { "Name": "Console" },
      {
        "Name": "File",
        "Args": {
          "path": "logs\\AppLogs_.txt",
          "rollingInterval": "Hour",
          "fileSizeLimitBytes": 15000000,
          "rollOnFileSizeLimit": true,
          "shared": true,
          "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level}]) {Message} {NewLine} {Exception}"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ]


  }

1 个答案:

答案 0 :(得分:0)

这是一篇很老的帖子,但对于遇到此问题的任何人,这里是我的解决方案。

您需要为要分离的每个级别创建一个配置文件。我有:

Serilog.Debug.json
Serilog.Information.json
Serilog.Error.json
Serilog.Warning.json

在这 4 个文件中,您需要具有以下配置:

{
  "Serilog:WriteTo:3:Args:configureLogger": { //notice this key
     "WriteTo": [
     {
         "Name": "File",
         "Args": {
         "path": "some path containing the log level"
          }
     }
     ],
"Filter": [
  {
    "Name": "ByIncludingOnly",
    "Args": {
      "expression": "@l = 'Debug'"
     }
   }
   ]
}
}

然后你可以有一个 Fatal Serilog.json 的文件和以下内容:

{
"Serilog": {
"Enrich": [
  "FromLogContext",
  "WithMachineName"
],
"restrictedToMinimumLevel": null,
"WriteTo": [
  {
    "Name": "File",
    "Args": {
      "path": "Logs/Fatal_.txt",
      "restrictedToMinimumLevel": "Fatal"
    }
  },
  {
    "Name": "Logger",
    "Args": {
      "configureLogger": {} // leave this empty: Information
    }
  },
  {
    "Name": "Logger",
    "Args": {
      "configureLogger": {} // leave this empty: Warning
    }
  },
  {
    "Name": "Logger",
    "Args": {
      "configureLogger": {} // leave this empty: Debug
    }
  },
  {
    "Name": "Logger",
    "Args": {
      "configureLogger": {} // leave this empty: Error
    }
  }
]
}
}  

为了使所有这些工作,您至少需要以下软件包:

Serilog.Sinks.File
Serilog.Expressions
Serilog.Expressions.Logging