有没有办法混合自定义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 [{}]
有没有办法实现这个目标?
答案 0 :(得分:0)
在Serilog的API中,任何接受消息模板的方法都需要准确数量的匹配参数。
如果模板中占位符的数量和提供的参数数量不匹配,Serilog不会爆炸,但是不能保证这将是可预测的 - 正如您在此处所看到的那样。 / p>因此,在这种情况下,必须在A
的参数中包含b
和Information()
才能获得您期望的输出。