是否可以在Serilog模板中有条件地包含字符串? 例如,
_logger.Information("Event: {evt} Description: {dsc}", evt, dsc}
如果dsc为null或为空,如何省略“ Description:”字符串?
答案 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的麻烦)