You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 12:39:27