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

如何在ASP.NET MVC Core项目中配置Serilog与AzureEventHub Sink

我刚好在几个ASP.NET Core项目里配置过Serilog的Azure Event Hub接收器,给你梳理下具体的实现思路和步骤,应该能直接套用:

1. 安装必要的NuGet包

首先得把Serilog核心包和Azure Event Hub接收器包装上,你可以通过NuGet包管理器或者命令行安装:

Install-Package Serilog.AspNetCore
Install-Package Serilog.Sinks.AzureEventHubs
# 如果想用appsettings.json配置,还需要这个
Install-Package Serilog.Settings.Configuration
2. 两种配置方式

方式一:代码优先配置(在Program.cs里直接写)

这种方式适合快速测试或者需要动态配置的场景,直接在Host初始化的时候配置Serilog:

var builder = WebApplication.CreateBuilder(args);

// 配置Serilog
builder.Host.UseSerilog((context, loggerConfig) =>
{
    loggerConfig
        .ReadFrom.Configuration(context.Configuration) // 可选:读取appsettings里的基础配置
        .MinimumLevel.Information() // 设置全局最低日志级别
        // 配置Azure Event Hub接收器
        .WriteTo.AzureEventHub(
            connectionString: "你的Azure Event Hub连接字符串",
            eventHubName: "目标事件中心名称",
            // 可选配置:批量发送参数,比如每50条或者2秒发送一次
            batchPostingLimit: 50,
            period: TimeSpan.FromSeconds(2)
        );
});

// 剩下的MVC配置
builder.Services.AddControllersWithViews();

var app = builder.Build();

// ... 中间件配置省略

app.Run();

方式二:通过appsettings.json配置(更推荐,便于环境切换)

先在appsettings.json里添加Serilog节点,把Azure Event Hub的配置写进去:

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "AzureEventHub",
        "Args": {
          "connectionString": "你的Azure Event Hub连接字符串",
          "eventHubName": "目标事件中心名称",
          "batchPostingLimit": 50,
          "period": "00:00:02"
        }
      }
    ]
  }
}

然后在Program.cs里读取这个配置:

var builder = WebApplication.CreateBuilder(args);

builder.Host.UseSerilog((context, loggerConfig) =>
{
    loggerConfig.ReadFrom.Configuration(context.Configuration);
});

// ... 其他配置同上
3. 关键注意事项
  • 连接字符串权限:确保你用的Event Hub连接字符串拥有Send权限,不然日志发不出去,Azure门户里可以在Event Hub的"共享访问策略"里创建专门的发送权限策略。
  • 批量发送行为:默认情况下,Serilog会攒够一定数量(默认100条)或者到时间间隔(默认2秒)才会批量发送日志到Event Hub,测试的时候可以把batchPostingLimit设为1,这样每条日志都会实时发送。
  • 日志过滤:记得用MinimumLevel.Override过滤掉微软类库的冗余日志,不然Event Hub会收到大量无关的Warning级别日志。
  • 异常处理:如果Event Hub暂时不可达,Serilog的sink会自动重试,你不需要额外处理,但可以通过配置retryCount参数调整重试次数(默认是5次)。

如果配置完还是没日志,你可以先开启Serilog的自诊断日志,看看是不是连接或者权限问题:

loggerConfig.Enrich.FromLogContext()
           .WriteTo.Debug() // 把日志输出到调试窗口,方便排查
           .WriteTo.AzureEventHub(...);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:03:40