我有一个c ++工具,通过printf即输出到STDOUT
printf ("%s\n", logline);
然后,我pipe它旋转日志即
tool | rotatelogs /tmp/logs/log_%s 60
一切工作很好,但rotatelogs将中线旋转,所以日志文件1有这个JSON片段:
{"tim
…和日志文件2将具有:
e":1386088072}
有没有一种方法来鼓励rotatelogs在换行符上旋转?
简单的回答:IO缓冲。 把你的命令加上:
stdbuf -i0 -o0 -e0
例如:
stdbuf -i0 -o0 -e0 tool | rotatelogs /tmp/logs/log_%s 60
如果您拥有的工具是您自己的,或者您有它的来源,请先修复它。 我认为这个工具是一个守护进程,因为它有日志旋转。 (意味着它有一个长期的生命周期。)是一个deamon,它必须复制std *并closures与tty相关的原稿。 (这有点偏离主题。)
无论如何,如果你不能触摸源,我build议使用“logrotate”而不是apache“rotatelogs”。 它是通用的更一般和更好的工具。
轮转日志的一个常见问题是,如果轮转日志的进程死了,所有的输出都消失了。 所以试试:
$ tool > logfile &
并为日志文件创build或编辑logrotate.conf。