Azure函数应用中Serilog Expressions输出模板换行失效问题求助
解决Azure函数应用Serilog输出模板换行符失效问题
我在Azure函数应用中已添加Serilog Expressions包,成功将SourceContext缩短为仅类名。应用配置存储于Azure门户「设置->配置->应用程序设置」,日志条目模板设置项为SerilogSettings:OutputTemplate,值如下:
{@t:yyyy-MM-dd HH:mm:ss.fff zzz}|{CorrelationId}|{@l:u3}|{Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)}|{@m} {@x}
问题是在Azure「高级编辑」视图中,换行符被转译为\n,Serilog无法识别,导致日志无换行,变为超长单行。以下是仍使用Serilog Expressions包的解决选项:
使用Serilog Expressions内置的
NewLine()函数
Serilog Expressions提供了专门的NewLine()函数生成换行,无需依赖配置中的实际换行符。修改输出模板为:{@t:yyyy-MM-dd HH:mm:ss.fff zzz}|{CorrelationId}|{@l:u3}|{Substring(SourceContext, LastIndexOf(SourceContext, '.') + 1)}|{@m}{NewLine()}{@x}此方式不受Azure配置转译影响,Serilog会直接解析生成正确的换行。
在代码中手动替换转义换行符
读取配置值后,手动将\\n替换为实际换行符,再传入Serilog配置。示例代码:var outputTemplate = Configuration["SerilogSettings:OutputTemplate"]?.Replace("\\n", Environment.NewLine); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(Configuration) .WriteTo.Console(outputTemplate: outputTemplate) // 替换为你实际使用的Sink .CreateLogger();调整Azure配置的换行输入方式
- 避免使用「高级编辑」,直接在设置项输入框中按回车输入换行,Azure通常会保留原始换行符。
- 若必须用高级编辑,尝试将
\n替换为\r\n,部分Serilog Sink可识别该Windows风格转义换行。
内容的提问来源于stack exchange,提问作者BrianS
相关产品推荐
相关产品推荐

