Apache rotatelogs生成文件未达指定最大尺寸的原因及相关问题咨询
Apache rotatelogs生成文件未达指定最大尺寸的原因及相关问题咨询
我来帮你梳理下这个问题,结合Apache rotatelogs的实际工作逻辑来拆解:
一、为什么会生成多个总大小才达1GB的文件?
rotatelogs的文件切割逻辑并不是等当前日志文件刚好达到1GB才触发分割,而是每次准备写入日志内容时,都会检查当前文件大小加上即将写入的数据是否会超过指定阈值。如果会超过,就先切割生成新文件,再写入当前数据。
你的测试场景是一次性发送1GB的内容,但操作系统在处理管道传输(比如用cat bigfile | rotatelogs ...这类方式)时,会把数据分成多个块来传输。举个例子:
- 第一块数据285MB写入后,文件大小没到1GB,不切割;
- 第二块375MB写入后,总大小约660MB,还是没到阈值,继续;
- 第三块437MB准备写入时,当前文件660MB加上437MB会超过1GB,于是先切割生成新文件,再写入这437MB。
这样就出现了三个总大小约1GB的文件。而你说文件数量随机(2个、4个都有可能),是因为每次测试时系统的IO缓存、管道传输块大小可能不一样,导致数据分块的数量和大小发生变化,进而触发切割的次数不同。
二、如何正确获取verbose模式的stderr输出?
你之前的命令参数顺序错了,rotatelogs的选项(比如-v)需要放在日志文件路径的前面。正确的命令应该是:
rotatelogs -v /var/log/somelogfile 1GB 2> /tmp/error.txt
这样就能把verbose模式下的stderr日志输出到/tmp/error.txt里了,之前的命令因为参数顺序不符合要求,所以rotatelogs无法正常启动。
备注:内容来源于stack exchange,提问作者tigrou
相关产品推荐
相关产品推荐

