我使用的是 OS X 10.9.4 并尝试使用 newsyslog轮换我的应用程序开发日志文件。
更具体地说,我想每天轮换文件,但前提是它们不为空(newsyslog 向它轮换的每个日志文件写入一两行,所以假设我只想轮换至少 1kb 的日志)。
我创建了一个文件/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的理解方式size
和 when
条件应结合使用,因此日志文件应在每晚午夜仅当为 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
任何有关如何实现此功能的提示将不胜感激!
最佳答案
使用 newsyslog 无法实现您要查找的内容(每天轮换文件,除非它们没有记录任何内容)。您引用的手册页没有说明任何有关 size
和 when
组合的内容,只是说如果未指定 when
,则就像只指定了 size
一样。实际情况是,当满足任一条件时,日志都会旋转。如果该实用程序类似于其 FreeBSD 对应项,则除非设置了二进制标志,否则它不会轮换大小小于 512 字节的日志。
MacOS 新的 newsyslog 替代品,ASL ,也没有您想要的行为。据我所知,唯一具有此功能的实用程序是 logrotate使用其 notifempty
配置选项。您可以使用 Homebrew 在 Mac 上安装 logrotate
关于macos - 使用 newsyslog 轮换日志文件,但前提是它们具有一定大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25205678/