macos - 使用 newsyslog 轮换日志文件,但前提是它们具有一定大小

标签 macos logging rotation log-rotation

我使用的是 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的理解方式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

任何有关如何实现此功能的提示将不胜感激!

最佳答案

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

MacOS 新的 newsyslog 替代品,ASL ,也没有您想要的行为。据我所知,唯一具有此功能的实用程序是 logrotate使用其 notifempty 配置选项。您可以使用 Homebrew 在 Mac 上安装 logrotate

关于macos - 使用 newsyslog 轮换日志文件,但前提是它们具有一定大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25205678/

相关文章:

python - Numpy 运行时警告 : divide by zero encountered in log10

java - 如何停止 quartz 警告记录器

javascript - Three.js - 绕轴旋转 Object3D

java - 如何在 Mac 中使用 Command-c/Command-v 快捷方式复制/粘贴文本?

mysql - 在 Mac 上运行 MySql

macos - 共享模拟器的 iPhone 应用程序

c# - 在运行时更新 NLog 目标文件名

android - RotationAsync 与 ListView 中的每一行

c++ - 如何正确移动相机的朝向

c++ - 非法指令 4 在 Mac 上使用 C++