Serilog条件模板标题

时间:2018-11-03 03:08:10

标签: serilog

是否可以在Serilog模板中有条件地包含字符串? 例如,

_logger.Information("Event: {evt} Description: {dsc}", evt, dsc}

如果dsc为null或为空,如何省略“ Description:”字符串?

1 个答案:

答案 0 :(得分:1)

message template绝对是方程式中的一个固定点。

如果description是您的辅助字段,则可以

_logger.ForContext("Description",dsc).Information("Event: {evt}", evt}

...如果执行此操作,请确保在日志呈现格式字符串中包括{Properties},以包括诸如此类的上下文字段,而这些字段在实际消息模板中并未使用。

除此之外,您还有一个谦虚的if

if(desc!=null)
    _logger.Information("Event: {evt} Description: {dsc}", evt, dsc}
else
    _logger.Information("Event: {evt}", evt);

请注意,出于明显的原因,这将在引擎盖下的消息中产生不同的消息模板ID,这可能是偏爱前者的原因。

(三元运算符也不是if也是不可能的-这会使您遇到Serilog Analyzer的麻烦)