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

Serilog多文件日志配置中fileSizeLimitBytes不生效求助

问题:Serilog多文件日志的fileSizeLimitBytes不生效,文件未满设定大小就滚动

我已基于Serilog实现多文件日志输出,当前配置向API日志文件写入日志,同时通过Filter.ByIncludingOnly将指定类(Web.Core.Helpers.ExcelReader)的日志单独输出到另一文件。过滤功能正常,但fileSizeLimitBytes属性未生效——日志文件仅达到98KB就滚动生成新文件。请问有其他实现按指定大小滚动日志的方法吗?

当前配置代码:

Log.Logger = new LoggerConfiguration()
         .ReadFrom.Configuration(configuration)
         .WriteTo.Logger(lc => lc
           .Filter.ByIncludingOnly(evt => evt.Properties.ContainsKey("SourceContext")
                && evt.Properties["SourceContext"].ToString().Contains("Web.Core.Helpers.ExcelReader"))
            .WriteTo.Map("Name", "import", (name, wt) => wt.File($"./Logs/log-{name}-.txt",
                rollingInterval: RollingInterval.Day,
                fileSizeLimitBytes: 200000, // File size limit for the 'import' key
                rollOnFileSizeLimit: true,
                retainedFileCountLimit: 60)))
         .WriteTo.Logger(lc => lc
            .WriteTo.Map("Name", "api", (name, wt) => wt.File($"./Logs/log-{name}-.txt",
                rollingInterval: RollingInterval.Day,
                fileSizeLimitBytes: 100000,
                rollOnFileSizeLimit: true,
                retainedFileCountLimit: 60)))
         .CreateLogger();

日志文件滚动情况:
日志文件滚动情况


解决方法

1. 排查配置冲突

你使用了.ReadFrom.Configuration(configuration)加载外部配置,如果appsettings.json等配置文件中也定义了文件滚动规则,会与代码中的设置冲突,且外部配置优先级更高。可以先注释掉.ReadFrom.Configuration(configuration)进行测试,确认是否是配置冲突导致的问题。

2. 单独按大小滚动(关闭按天规则)

如果不需要同时按天和大小滚动,可将rollingInterval设为RollingInterval.Infinite,仅按文件大小触发滚动:

.WriteTo.Map("Name", "import", (name, wt) => wt.File($"./Logs/log-{name}-.txt",
    rollingInterval: RollingInterval.Infinite,
    fileSizeLimitBytes: 200000,
    rollOnFileSizeLimit: true,
    retainedFileCountLimit: 60))

3. 升级Serilog.Sinks.File包

旧版本的Serilog.Sinks.File可能存在fileSizeLimitBytes与RollingInterval.Day组合使用时的bug,建议升级到最新版本的NuGet包,再测试滚动逻辑是否正常。

4. 自定义滚动逻辑(进阶)

若以上方法无效,可自定义文件名格式和滚动逻辑,确保大小滚动的判断准确:

.WriteTo.Logger(lc => lc
    .Filter.ByIncludingOnly(evt => evt.Properties.ContainsKey("SourceContext")
         && evt.Properties["SourceContext"].ToString().Contains("Web.Core.Helpers.ExcelReader"))
    .WriteTo.File(
        path: "./Logs/log-import-.txt",
        rollingInterval: RollingInterval.Day,
        fileSizeLimitBytes: 200000,
        rollOnFileSizeLimit: true,
        retainedFileCountLimit: 60,
        outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}"
    )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:40:44