初始配置后将 Enrich.WithProperty 添加到 serilog 全局记录器
Add Enrich.WithProperty to serilog global logger after initial configuration
我们有一个带有 Main() 方法的服务,它像这样初始化我们的 serilog 记录器:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.ColoredConsole()
.WriteTo.Seq(ConfigurationManager.AppSettings["SeqServer"], apiKey: ConfigurationManager.AppSettings["SeqApiKey"])
.Enrich.WithProperty("ServiceName", "SomeConsumer")
.CreateLogger();
现在,我想用另一种方法附加一个额外的 属性 到这个记录器。我想添加一个 .Enrich.WithProperty,因为我喜欢的日志记录风格
Log.Error("Somelog")
我该怎么做?我只想附加一个带有一些字符串的新 属性。
我刚试过这个,我想它可以:
SomeMethod() {
var log = Log.Logger.ForContext("PropertyName", "Some string I need so bad");
log.Debug("Beginning of log with enrichment");
}
这样我就可以避开using
块,但是我还是很好奇有没有办法修改全局Log.Logger对象
在方法 CreateLogger
之后,您无法修改创建的记录器实例。如果特定方法或 class 只想在特定上下文中使用更多变量来丰富日志,那么 ForContext
是可行的方法。
另一种方法是创建一个您在开始时设置的动态自定义增强器,但这会根据某些逻辑改变其行为。
2021-08-21 更新:您现在可以在创建 Serilog 管道后使用 Serilog.Enrichers.GlobalLogContext 包含全局属性。
我们有一个带有 Main() 方法的服务,它像这样初始化我们的 serilog 记录器:
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.ColoredConsole()
.WriteTo.Seq(ConfigurationManager.AppSettings["SeqServer"], apiKey: ConfigurationManager.AppSettings["SeqApiKey"])
.Enrich.WithProperty("ServiceName", "SomeConsumer")
.CreateLogger();
现在,我想用另一种方法附加一个额外的 属性 到这个记录器。我想添加一个 .Enrich.WithProperty,因为我喜欢的日志记录风格
Log.Error("Somelog")
我该怎么做?我只想附加一个带有一些字符串的新 属性。
我刚试过这个,我想它可以:
SomeMethod() {
var log = Log.Logger.ForContext("PropertyName", "Some string I need so bad");
log.Debug("Beginning of log with enrichment");
}
这样我就可以避开using
块,但是我还是很好奇有没有办法修改全局Log.Logger对象
在方法 CreateLogger
之后,您无法修改创建的记录器实例。如果特定方法或 class 只想在特定上下文中使用更多变量来丰富日志,那么 ForContext
是可行的方法。
另一种方法是创建一个您在开始时设置的动态自定义增强器,但这会根据某些逻辑改变其行为。
2021-08-21 更新:您现在可以在创建 Serilog 管道后使用 Serilog.Enrichers.GlobalLogContext 包含全局属性。