Rotatelogs 旋转日志文件中间日志条目

Rotatelogs 旋转日志文件中间日志条目

我有一个通过 printf 输出到 STDOUT 的 c++ 工具,即

printf ("%s\n", logline);  

然后我将其通过管道传输到 rotatelogs 即

tool | rotatelogs /tmp/logs/log_%s 60  

一切运行良好,但 rotatelogs 会在中间行旋转,因此日志文件 1 有这个 json 片段:

{"tim  

...日志文件 2 将包含:

e":1386088072}  

有没有办法让 rotatelogs 在换行时进行旋转?

答案1

简单答案:IO 缓冲。通过在命令前加上前缀来关闭它:

stdbuf -i0 -o0 -e0  

例如:

stdbuf -i0 -o0 -e0  tool | rotatelogs /tmp/logs/log_%s 60

答案2

如果您拥有的工具是您自己的,或者您有它的源代码,请先修复它。我假设该工具是一个守护进程,因为它有要轮换的日志。(意味着它有长期的生命周期。)要成为守护进程,它必须复制 std* 并关闭与 tty 相关的原始文件。(这有点偏离主题。)

无论如何,如果您无法接触源代码,我建议使用“logrotate”而不是 apache“rotatelogs”。它是更通用、更完善的通用工具。

rotatelogs 的一个常见问题是,如果 rotatelogs 进程死亡,所有输出都会消失。因此请尝试:

$ tool > logfile &

并为日志文件创建或编辑logrotate.conf。

相关内容