gpt4 book ai didi

python - logrotate 后日志开头的空值

转载 作者:行者123 更新时间:2023-12-04 18:31:19 25 4
gpt4 key购买 nike

我正在使用 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
}
logrotation 完成后,我在文件开头看到一堆空字符。看起来像
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
看起来像无限长的字符串。文件大小也相似。
有解决方案建议 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

关于python - logrotate 后日志开头的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64871670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com