winston-daily-rotate-file日志切分规则疑问及配置求助
关于Winston日志轮转的两个问题解答
1. 时间到了就生成新文件是预期行为吗?
这绝对是预期行为!你用的DailyRotateTransport(Winston的日志轮转插件)本身就是设计成同时基于时间间隔和文件大小来触发轮转的:
- 只要时间走到了
datePattern定义的间隔节点(你设的是YYYY-MM-DDTHH-mm,也就是每分钟都会触发检查),不管当前日志文件有没有写满maxsize,都会自动生成带当前时间戳的新文件。 - 反过来,如果文件先写满了
maxsize,哪怕时间间隔没到,也会立刻轮转生成新文件。
你的测试场景里,因为datePattern精确到了分钟,所以只要过了一分钟,系统就会检测到当前时间和日志文件名里的分钟不匹配,直接创建新文件——这完全符合插件的设计逻辑,不是配置出错了。
2. 怎么让日志只按大小轮转,去掉自动加的时间戳?
如果你的核心需求是只有文件写满时才轮转,完全不需要时间触发,那别用DailyRotateTransport了,直接用Winston自带的基础File传输器就行!这个传输器支持maxsize和maxFiles配置,只会在文件达到指定大小后才创建新文件,新文件的命名是原文件名加数字后缀(比如application.log.1、application.log.2),不会自动加时间戳。
给你改好的配置示例:
{ level: 'info', filename: 'logs/application.log', maxsize: 1024, // 对应你测试用的1k maxFiles: 3, audit: "logs/application-audit.json" }
要是你非得用DailyRotateTransport(比如依赖它的audit功能),那可以试试把datePattern设成一个固定不变的字符串(比如'fixed'),但这种做法其实违背了这个插件的设计初衷,可能会有未知问题,还是建议直接换用基础File传输器更稳妥。
内容的提问来源于stack exchange,提问作者phymart
相关产品推荐
相关产品推荐

