我希望我的日志根据其级别保存在不同的文件夹中。我希望此配置完全通过配置文件而不是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" ]
}
答案 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