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

使用UseSerilogRequestLogging时如何添加自定义日志提供程序?

解决方案

要让自定义日志提供程序在Serilog管道中生效,核心是理解Serilog接管Microsoft.Extensions.Logging系统后,原有的MS日志提供程序不会自动参与Serilog的日志流,可通过以下两种方式适配:

方式一:将自定义逻辑封装为Serilog Sink(推荐)

Serilog的扩展机制基于Sink实现,直接把原自定义日志提供程序的逻辑改成Serilog的ILogEventSink,就能直接融入Serilog管道:

  1. 创建自定义Sink类:
using Serilog;
using Serilog.Core;
using Serilog.Events;

public class CustomSerilogSink : ILogEventSink
{
    public void Emit(LogEvent logEvent)
    {
        // 这里实现原CustomLoggerProvider中的日志处理逻辑
        // 例如格式化日志内容、输出到自定义存储等
        string formattedLog = $"{logEvent.Timestamp:yyyy-MM-dd HH:mm:ss} [{logEvent.Level}] {logEvent.MessageTemplate.Render(logEvent.Properties)}";
        // 执行你的自定义操作,比如写入文件、发送到消息队列等
    }
}
  1. 配置Serilog时添加该Sink,并注入到服务中:
// 构建Serilog Logger
var logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .WriteTo.Custom(new CustomSerilogSink()) // 添加自定义Sink
    // 可同时保留其他Sink,比如控制台
    .WriteTo.Console()
    .CreateLogger();

// 注入Serilog到服务,替代默认日志系统
builder.Services.AddSerilog(logger);

// 正常启用请求日志
app.UseSerilogRequestLogging();

方式二:将Serilog日志转发到原有MS日志提供程序

如果不想修改原自定义LoggerProvider的代码,可以让Serilog把日志转发回Microsoft.Extensions.Logging系统,这样原自定义提供程序就能收到日志:

using Serilog.Extensions.Logging;

// 构建Serilog Logger,配置转发到MS日志系统
var logger = new LoggerConfiguration()
    .MinimumLevel.Information()
    .WriteTo.ExtensionsLogging(configure =>
    {
        // 在MS日志配置中添加你的自定义提供程序
        configure.AddCustomLoggerProvider();
    })
    .CreateLogger();

// 注入Serilog
builder.Services.AddSerilog(logger);

// 启用请求日志
app.UseSerilogRequestLogging();

为什么之前的方法不生效?

当调用services.AddSerilog()时,Serilog会替换Microsoft.Extensions.Logging的默认日志提供程序,所有日志请求都会直接进入Serilog管道,原通过builder.Logging.AddCustomLoggerProvider()添加的MS日志提供程序不会被触发。而你尝试的LoggerProviderCollection需要配合WriteTo.LoggerProviderCollection()一起使用,否则Serilog不会将日志转发到该集合中的提供程序,这也是之前配置无效的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:20:02