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

.NET 3.1 Azure Function 如何将Serilog日志输出到Azure Log Stream

解决方案

1. 调整Azure Functions基础日志配置

  • 进入Azure门户对应Function App的「配置」→「监视」→「App Service日志」
  • 开启「应用程序日志(文件系统)」,级别设置为Information,保存后等待配置生效
  • 查看Log Stream时,确认顶部筛选框选择的是「应用日志」而非仅「系统日志」

同时需要修改项目根目录的host.json配置,避免日志被Azure默认过滤规则拦截:

{
  "version": "2.0",
  "logging": {
    "logLevel": {
      "Default": "Information",
      "Function": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

2. 修正Serilog服务注册逻辑

你当前同时注册了SerilogLoggerProvider和调用了AddSerilog,属于重复注册,会导致日志输出冲突,直接删除AddSingleton<ILoggerProvider>那一行即可。

3. 添加适配Azure环境的Serilog Sink

本地调试用的控制台Sink在Azure Functions运行环境中不会被Log Stream直接捕获,需要安装专门的适配Sink:

  • 先安装NuGet包 Serilog.Sinks.AzureAppServices
  • 修改Startup.cs中的Serilog初始化代码,添加适配Sink,示例如下:
Log.Logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
    .Enrich.FromLogContext()
    // 保留本地调试用的控制台输出
    .WriteTo.Console()
    // 新增适配Azure Log Stream的Sink
    .WriteTo.AzureAppServices()
    // 保留原有文件输出配置
    .WriteTo.File(
        @"D:\home\LogFiles\Application\myapp.txt",
        fileSizeLimitBytes: 1_000_000,
        rollOnFileSizeLimit: true,
        shared: true,
        flushToDiskInterval: TimeSpan.FromSeconds(1))
    .CreateLogger();

// 移除原来的AddSingleton<ILoggerProvider>注册,只保留AddSerilog即可
builder.Services.AddLogging(lb => lb.AddSerilog(Log.Logger, dispose: true));

4. 额外注意事项

  • 如果使用Serilog.Log静态类输出日志,确保Function执行过程中没有其他代码覆盖Log.Logger的赋值
  • 若部署到Linux消费计划的Function App,文件路径需要修改为/home/LogFiles/Application/myapp.txt,Windows计划可以保留原有路径

内容的提问来源于stack exchange,提问作者chiaDev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:06:02