首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >日志旋转后日志开头的空值。

日志旋转后日志开头的空值。
EN

Stack Overflow用户
提问于 2020-11-17 08:26:48
回答 1查看 700关注 0票数 2

我使用logrotate来管理我的日志。因为我得管理一堆日志文件。我的log旋转式配置看起来像

代码语言:javascript
复制
/log/typeA*.log
/log/typeB*.log
/log/typeC*.log{
        daily
        rotate 7
        copytruncate
        size 1M
        compress
        su root root
        create 0644 root root
        missingok
}

在完成日志旋转之后,我会在文件的开头看到一串空字符。看起来就像

代码语言:javascript
复制
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

看起来像是无限长的绳子。此外,文件大小看起来类似。有一种解决方案建议https://serverfault.com/a/510470使用后置脚本,如

代码语言:javascript
复制
postrotate
   sed -i -e 's/\o00//g' "$1"
endscript

但是使用此脚本将修改文件并更改流。因此,日志不会被重定向到某个不存在的文件流。

我正在使用python日志模块生成日志。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-26 17:08:20

同样的事情也发生在我身上,并且能够解决它。

其背后的原因是旋转文件不是用标志O_APPEND打开的。因此,当旋转时,它仍然保持相同的写入偏移量,并开始从新文件的中间写入。该偏移之前的所有内容都标记为NULL,因为文件的开头是空的。

换句话说,您可以在文件中完成字符编号n的写入,并在触发旋转时截断它。不再从字符号0重新开始,而是从字符号n+1继续,前n个字符将被标记为NULL。

要避免此问题,必须使用标志O_APPEND打开文件。

更多信息可以在以下线程中找到:https://groups.google.com/g/comp.unix.solaris/c/Zc7ysjMGprQ?pli=1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64871670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档