Serilog配置问题:如何实现每小时生成单个日志文件?
如何配置Serilog实现每小时仅生成单个日志文件?
当前使用Serilog的File Sink时,日志按小时滚动但同一小时内生成了多个拆分文件(如log-2024080512_001.txt、log-2024080512_002.txt),希望每小时仅生成一个日志文件。原配置如下:
{ "Serilog": { "Using": ["Serilog.Sinks.File"], "MinimumLevel": "Information", "WriteTo": [ { "Name": "File", "Args": { "path": "./logs/log-.txt", "rollingInterval": "Hour", "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" } } ], "Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"] } }
解决方案
问题出在Serilog File Sink的默认行为:它会同时按时间间隔和文件大小触发滚动。当单小时内的日志文件达到默认1GB的大小限制时,就会生成带序号的拆分文件。要实现每小时仅一个文件,只需禁用按大小拆分的逻辑:
在WriteTo的Args中添加"rollOnFileSizeLimit": false配置项,修改后的完整配置如下:
{ "Serilog": { "Using": ["Serilog.Sinks.File"], "MinimumLevel": "Information", "WriteTo": [ { "Name": "File", "Args": { "path": "./logs/log-.txt", "rollingInterval": "Hour", "rollOnFileSizeLimit": false, "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" } } ], "Enrich": ["FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId"] } }
说明
添加该配置后,Serilog会忽略文件大小限制,仅按rollingInterval: "Hour"配置的小时间隔滚动日志,同一小时内的所有日志都会写入同一个文件,不会生成带序号的拆分文件。
如果你的业务场景中单小时日志量极大,担心文件体积过大,也可以通过fileSizeLimitBytes参数设置一个更大的阈值(例如设为10737418240即10GB),同时保持rollOnFileSizeLimit: false,只要确保单小时内日志不会超过这个阈值,就能保证每小时仅生成一个文件。
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

