Serilog LogContext和自定义args不能合并

时间:2017-11-14 15:51:10

标签: serilog

有没有办法混合自定义serilog args和LogContext属性?我查看了文档,但似乎没有提及。

    static void Main()
    {
        Log.Logger = new LoggerConfiguration()
            .Enrich.FromLogContext()
            .WriteTo.LiterateConsole(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level}] {Message} [{Properties}]{NewLine}")
            .CreateLogger();

        using (LogContext.PushProperty("A", 5))
        {
            Log.Information("Message using context {A}");

            var b = 1;
            Log.Information("Message usign context {A} and custom {b}", b);
        }

        Console.ReadLine();
    }

输出

//output: 
//2017-11-14 15:47:03 [Information] Message using context 5 [{}]
//2017-11-14 15:47:54 [Information] Message usign context 1 and custom {b} [{}]

预期输出

//output: 
//2017-11-14 15:47:03 [Information] Message using context 5 [{}]
//2017-11-14 15:47:54 [Information] Message usign context 5 and custom 1 [{}]

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

在Serilog的API中,任何接受消息模板的方法都需要准确数量的匹配参数。

如果模板中占位符的数量和提供的参数数量不匹配,Serilog不会爆炸,但是不能保证这将是可预测的 - 正如您在此处所看到的那样。 / p>

因此,在这种情况下,必须在A的参数中包含bInformation()才能获得您期望的输出。