我正在使用logrotate
来管理我的日志。因为我必须管理一堆日志文件。我的logrotate配置看起来像
/log/typeA*.log
/log/typeB*.log
/log/typeC*.log{
daily
rotate 7
copytruncate
size 1M
compress
su root root
create 0644 root root
missingok
}
日志旋转完成后,我在文件开头看到一堆空字符。看起来像
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
看起来像无限长的字符串。文件大小看起来也差不多。 有一种解决方案建议https://serverfault.com/a/510470使用类似postrotate的脚本
postrotate
sed -i -e 's/\o00//g' "$1"
endscript
但使用此脚本将修改文件并更改流。所以日志不会被重定向到某个不存在的文件流。
我正在使用python日志模块生成日志
同样的事情也发生在我身上,并且我能够修复它
其背后的原因是旋转文件没有使用O_APPEND标志打开。因此,旋转时,它仍保持相同的写入偏移量,并从新文件的中间开始写入。偏移量之前的所有内容都标记为NULL,因为文件的开头是空的
换句话说,在文件中完成字符号n的写入,并在触发旋转时将其截断。不再从字符号0开始,而是从字符号n+1继续,前n个字符将标记为NULL
为了避免这个问题,您必须打开带有O_APPEND标志的文件
更多信息可在以下线程中找到: https://groups.google.com/g/comp.unix.solaris/c/Zc7ysjMGprQ?pli=1
相关问题 更多 >
编程相关推荐