You need to enable JavaScript to run this app. Serilog多Sink场景下如何配置Console与File的差异化日志级别
优惠活动
大模型
产品
解决方案
定价
更多

Serilog多Sink场景下如何配置Console与File的差异化日志级别

Serilog 分Sink日志级别配置调整方案

实现逻辑

Serilog 的日志管线支持 单Sink独立级别管控:

  • 全局最低级别作为整个管线的统一门槛,低于该级别的日志会被直接丢弃
  • 每个输出Sink可以通过restrictedToMinimumLevel参数单独设置自身的最低输出级别,优先级高于全局配置

调整后核心代码

// 需引入命名空间:using Serilog.Events; 以使用LogEventLevel枚举
var outputTemplate = "[{Level:u3}] {Message:lj}{NewLine}{Exception}";

Log.Logger = new LoggerConfiguration()
    // 保留全局最低级别为Verbose,保证文件端可接收所有级别日志
    .MinimumLevel.Verbose()
    // 控制台Sink单独指定最低输出级别为Info,自动过滤Verbose、Debug级日志
    .WriteTo.Console(
        outputTemplate: outputTemplate,
        theme: SystemConsoleTheme.Literate,
        restrictedToMinimumLevel: LogEventLevel.Info
    )
    // 文件Sink不修改级别配置,继承全局Verbose门槛,记录所有级别日志
    .WriteTo.File($"logs/log-{DateTime.Now:yyyy-MM-dd_HH:mm:ss.fff}.log")
    .CreateLogger();

可选补充配置

  • 若需严格限定控制台仅输出Info、Warn、Error三级,排除更严重的Fatal日志,可给Console Sink添加自定义过滤规则:
.WriteTo.Console(
    outputTemplate: outputTemplate,
    theme: SystemConsoleTheme.Literate,
    // 自定义过滤逻辑,仅保留指定三级日志
    filter: logEvent => logEvent.Level is LogEventLevel.Info or LogEventLevel.Warning or LogEventLevel.Error
)
  • 原代码中文件日志的文件名是应用启动时的时间戳,运行期间所有日志会写入同一个文件。如果需要按时间自动滚动生成新日志文件(比如每天/每小时切分),可替换File Sink配置:
.WriteTo.File(
    path: "logs/log-.log", // 文件名模板,滚动时自动追加时间戳
    rollingInterval: RollingInterval.Day, // 按天滚动,可改为Hour/Minute等粒度
    outputTemplate: outputTemplate
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.06 15:24:04