使用newsyslog来旋转日志文件,但前提是它们具有一定的大小

时间:2014-08-08 14:21:13

标签: macos logging rotation log-rotation

我正在使用OS X 10.9.4并尝试使用newsyslog来轮换我的应用开发日志文件。

更具体地说,我想每天轮换文件,但前提是它们不是空的(newsyslog将一行或两行写入它旋转的每个日志文件,所以假设我只想旋转至少1kb的日志)。 / p>

我创建了一个文件/etc/newsyslog.d/code.conf

# logfilename                     [owner:group]   mode  count  size  when   flags [/pid_file] [sig_num]
/Users/manuel/code/**/log/*.log   manuel:staff    644   7      1     $D0    GN

我理解man page for the configuration file的方式是sizewhen条件应该合并使用,因此日志文件应该每晚午夜轮换 它们是1kb或更大。

不幸的是,这不是发生的事情。日志文件每晚都会轮换,无论它们是否仅来自newsyslog或其他任何内容的轮换消息:

~/code/myapp/log (master) $ ls
total 32
drwxr-xr-x   6 manuel  staff   204B Aug  8 00:17 .
drwxr-xr-x  22 manuel  staff   748B Jul 25 14:56 ..
-rw-r--r--   1 manuel  staff    64B Aug  8 00:17 development.log
-rw-r--r--   1 manuel  staff   153B Aug  8 00:17 development.log.0

~/code/myapp/log (master) $ cat development.log
Aug  8 00:17:41 localhost newsyslog[81858]: logfile turned over

~/code/myapp/log (master) $ cat development.log.0 
Aug  7 00:45:17 Manuels-MacBook-Pro newsyslog[34434]: logfile turned over due to size>1K
Aug  8 00:17:41 localhost newsyslog[81858]: logfile turned over

有关如何使这项工作的任何提示将不胜感激!

1 个答案:

答案 0 :(得分:3)

使用newsyslog无法实现您所寻找的内容(每天轮换文件,除非他们没有记录任何内容)。您引用的手册页没有说明sizewhen被合并的任何内容,只是说如果未指定when,那么它就像只有{{1}已指定。实际情况是,当满足任一条件时,日志都会旋转。如果该实用程序与它的FreeBSD对应项一样,除非设置了二进制标志,否则它不会旋转小于512字节的日志。

MacOS'更新的newsyslog替换ASL,也没有你想要的行为。据我所知,唯一具有此功能的实用程序是logrotate使用其size配置选项。您可以使用Homebrew

在Mac上安装logrotate