不同的最低级别日志 Serilog
Posted
技术标签:
【中文标题】不同的最低级别日志 Serilog【英文标题】:Different Minimum Level Logs Serilog 【发布时间】:2019-02-02 10:20:18 【问题描述】:有没有办法区分 Serilog 的不同记录器之间记录的级别?我希望能够将 MinimumLevel Debug 记录到控制台输出,但仅将警告及以上记录到我的文件输出。我正在使用 ASP.NET Core 2.1,这就是 appsetting.json 目前的样子:
"Serilog":
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": "Debug",
"WriteTo": [
"Name": "RollingFile",
"IsJson": true,
"Args":
"pathFormat": "C:\\Logs\\Log-Hour.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
,
"Name": "Console"
]
,
它类似于“Args”下的另一个参数吗?我已在此位置尝试过“minimumnLevel”,但没有成功。
【问题讨论】:
app.config 中是如何做到的? 对于 .Net 应用程序?对于.net,我不需要这种级别的细节/差异化,只需要.net 核心。这是我在添加 serilog 后添加到 .Net 配置中的全部内容: 我能够让它在 app.config 中工作。诀窍是确保 serilog 实际上关注这一行。 然后为了记录到我使用的文件 和然后使用它登录到控制台 抱歉格式化,我不确定如何在评论中进行换行。 感谢@PHenry 找出应用程序/网络配置设置来设置调试的最低级别。我一直在尝试serilog:MinimumLevel:Debug
之类的东西,但无济于事
【参考方案1】:
您要查找的设置是restrictedToMinimumLevel
。此 GitHub issue 显示了一些示例,但对于您的示例,您只需将 restrictedToMinimumLevel
添加到您的 Args
for RollingFile
:
"Serilog":
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": "Debug",
"WriteTo": [
"Name": "RollingFile",
"IsJson": true,
"Args":
"pathFormat": "C:\\Logs\\Log-Hour.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
"restrictedToMinimumLevel": "Warning"
,
"Name": "Console"
]
,
【讨论】:
【参考方案2】:在您的配置中,您有一个 Serilog 记录器,但您有 2 个 sink。您的接收器之一是 RollingFile,另一个是 Console。
You can override (but only raise) the minimum logging level per sink,参数称为restrictedToMinimumLevel
。
由于您想在文件接收器中将最低日志记录级别从记录器的默认 Debug
提高到 Warning
,因此在 appsettings.json 文件中,它看起来像这样:
"Serilog":
"Using": [ "Serilog.Sinks.Console" ],
"MinimumLevel": "Debug",
"WriteTo": [
"Name": "RollingFile",
"IsJson": true,
"Args":
"pathFormat": "C:\\Logs\\Log-Hour.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
"restrictedToMinimumLevel": "Warning"
,
"Name": "Console"
]
,
【讨论】:
【参考方案3】:根据上面的答案,这就是我在代码中而不是在配置中设置它的方式
LoggerConfiguration GetConfig()
=> new LoggerConfiguration()
.WriteTo.Seq(serverUrl: "http://localhost:5341", restrictedToMinimumLevel: LogEventLevel.Debug)
.WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error);
var logger = GetConfig().CreateLogger();
builder.RegisterInstance(logger).As<ILogger>();
在我这样做之后,它适用于日志级别信息及更高级别。调试不起作用。 This post 解释了原因。
我必须像这样设置一个“全局”最低级别。
LoggerConfiguration GetConfig()
=> new LoggerConfiguration()
.WriteTo.Seq(serverUrl: "http://localhost:5341", restrictedToMinimumLevel: LogEventLevel.Debug)
.WriteTo.Console(restrictedToMinimumLevel: LogEventLevel.Error)
.MinimumLevel.Verbose();
【讨论】:
以上是关于不同的最低级别日志 Serilog的主要内容,如果未能解决你的问题,请参考以下文章