在初始配置后,将Enrich.WithProperty添加到serilog全局记录器



我们有一个带有Main()方法的服务,它初始化我们的serilog记录器,如下所示:

            Log.Logger = new LoggerConfiguration()
               .MinimumLevel.Debug()
               .WriteTo.ColoredConsole()
               .WriteTo.Seq(ConfigurationManager.AppSettings["SeqServer"], apiKey: ConfigurationManager.AppSettings["SeqApiKey"])
               .Enrich.WithProperty("ServiceName", "SomeConsumer")                   
               .CreateLogger(); 

现在,在另一种方法中,我想将一个额外的属性附加到此记录器。我想添加.Erich.WithProperty,因为我喜欢的日志记录样式Log.Error("Somelog")

我该怎么做?我只想用一些字符串附加一个新属性。

在方法CreateLogger之后,您无法修改创建的记录器实例。如果一个特定的方法或类只想在该特定的上下文中使用更多的变量来丰富日志,那么ForContext就是最好的方法。

另一种选择是创建一个动态自定义enricher,您在一开始就设置了它,但这将根据一些逻辑改变它的行为。

更新2021-08-21:在创建Serilog管道后,您现在可以使用Serilog.Enrichers.GlobalLogContext来包含全局属性。

我刚刚尝试过,我想它会成功的:

SomeMethod() {
    var log = Log.Logger.ForContext("PropertyName", "Some string I need so bad");
    log.Debug("Beginning of log with enrichment");
}

这样我可以避免using块,但我仍然很好奇是否有办法修改全局Log.Logger对象

最新更新