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

Serilog如何配置将全量日志写入文件、仅错误日志写入Oracle数据库

问题原因

你当前写法的问题在于,连续调用MinimumLevel.xxx()是在修改全局的日志最低级别阈值,第二次调用MinimumLevel.Error()会直接把全局阈值从Verbose覆盖为Error,导致所有写入目标(包括文件Sink)都只能拿到Error及以上级别的日志。

解决方案

不要通过修改全局级别来限制单个Sink的日志等级,改为给每个Sink单独配置restrictedToMinimumLevel参数,全局级别保持Verbose让全量日志进入处理管道即可,调整后代码如下:

Log.Logger = new LoggerConfiguration()          
            // 全局最低级别设为Verbose,保证所有级别日志都能进入处理管道
            .MinimumLevel.Verbose()
            // 文件Sink不单独限制级别,沿用全局配置,写入全量日志
            .WriteTo.File("logs/myLog.txt", rollingInterval: RollingInterval.Minute)
            // Oracle Sink单独限制最低级别为Error,仅写入错误及以上级别日志
            .WriteTo.Oracle(cfg =>
                cfg.WithSettings(logConnectionString, tableSpaceAndTableName: "MY_TABLE")
                .UseBurstBatch(true, 1000, true, 1)
                .CreateSink(), 
                restrictedToMinimumLevel: Serilog.Events.LogEventLevel.Error)
            .CreateLogger(); 

配置逻辑说明

  • 全局最低级别控制的是哪些日志能进入Serilog的处理管道,设为Verbose才能保证Verbose、Debug、Info、Warn、Error、Fatal所有级别的日志都不会被提前过滤
  • 每个Sink的restrictedToMinimumLevel参数是单独控制当前Sink要写入的日志最低级别,不会影响其他Sink的写入逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:07