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
相关产品推荐
相关产品推荐

