初始配置后将 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 包含全局属性。