我刚刚将Serilog Expressions包添加到我的Azure函数应用程序中,这样我就可以使用该功能将SourceContext缩短为只有类名(顺便说一句,这很好用)。函数应用程序将其配置参数存储在Azure门户中的函数应用程序的设置-〉配置-〉应用程序设置部分。日志条目模板的设置名为SerilogSettings:OutputTemplate,为该设置输入的值与它在另一个应用程序中正确工作时完全相同:
{@t:yyyy-MM-dd HH:mm:ss.fff zzz}|{CorrelationId}|{@l:u3}|{Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)}|{@m}\n{@x}
我看到的问题是这里的换行符。Azure中的应用程序设置部分有一个“高级编辑”视图,在那里你可以看到输入的设置值实际上在后台被转换成一个大的json字符串,而这个json字符串实际上是应用程序在启动时读取的。下面是这个json字符串的一个关键部分:
[
...
{
"name": "SerilogSettings:OutputTemplate",
"value": "{@t:yyyy-MM-dd HH:mm:ss.fff zzz}|{CorrelationId}|{@l:u3}|{Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)}|{@m}\\n{@x}",
"slotSetting": false
},
...
]
请注意,换行符\n
已被转义,现在是\\n
。因此,现在在启动时,该模板字符串被发送到Serilog,它无法理解\\n
。最终结果是写入的日志条目中没有任何换行符。日志文件由一个非常长的行组成。在仍然使用表达式包的情况下,我有什么选择来解决这个问题?
1条答案
按热度按时间pvabu6sv1#
在仍然使用Expressions包的情况下,我有哪些选项可以解决此问题?
有关表达式实现的更多详细信息,请参考此blog。