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

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

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

然后,我pipe它旋转日志即

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

一切工作很好,但rotatelogs将中线旋转,所以日志文件1有这个JSON片段:

 {"tim 

…和日志文件2将具有:

 e":1386088072} 

有没有一种方法来鼓励rotatelogs在换行符上旋转?

  • Shell脚本中的“线程”
  • 即时压缩dd备份
  • 如何改变VGA模式启动后,用Ubuntulogin?
  • 删除名称中带有连字符的UNIX目录
  • 复制大量文件时,“参数列表太长”错误
  • 如何在shell脚本中编码rdesktop密码参数?
  • 2 Solutions collect form web for “旋转日志文件中间日志条目”

    简单的回答: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。

    服务器问题集锦,包括 Linux(Ubuntu, Centos,Debian等)和Windows Server服务器.