【问题标题】:Add Enrich.WithProperty to serilog global logger after initial configuration初始配置后将 Enrich.WithProperty 添加到 serilog 全局记录器
【发布时间】:2016-05-13 16:38:13
【问题描述】:

我们有一个带有 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")

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

【问题讨论】:

    标签: .net logging serilog


    【解决方案1】:

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

    另一种方法是创建一个您在开始时设置的动态自定义扩充器,但这会根据某些逻辑改变其行为。

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

    【讨论】:

    • 感谢您的澄清
    【解决方案2】:

    我刚刚试过了,我想它会做的:

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

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

    【讨论】:

    • 这是使用 Serilog 完成所需工作的正确方法。您可以从现有记录器创建记录器,添加上下文变量(一个或多个)。
    • 这显示了这个日志[19:58:05 INF] ( ) Beginning of log with enrichment。在哪个部分我可以看到 PropertyName 值?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    相关资源
    最近更新 更多