macosloggingrotationlog-rotation

Use newsyslog to rotate log files, but only if they have a certain size


I'm on OS X 10.9.4 and trying to use newsyslog to rotate my app development log files.

More specifically, I want to rotate the files daily but only if they are not empty (newsyslog writes one or two lines to every logfile it rotates, so let's say I only want to rotate logs that are at least 1kb).

I created a file /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

The way I understand the man page for the configuration file is that size and when conditions should work in combination, so logfiles should be rotated every night at midnight only if they are 1kb or larger.

Unfortunately this is not what happens. The log files are rotated every night, no matter if they only the rotation message from newsyslog or anything else:

~/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

Any tips on how to get this working would be appreciated!


Solution

  • What you're looking for (rotate files daily unless they haven't logged anything) isn't possible using newsyslog. The man page you referenced doesn't say anything about size and when being combined other than to say that if when isn't specified, than it is as-if only size was specified. The reality is that the log is rotated when either condition is met. If the utility is like its FreeBSD counterpart, it won't rotate logs less than 512 bytes in size unless the binary flag is set.

    MacOS' newer replacement for newsyslog, ASL, also doesn't have the behavior you desire. As far as I know, the only utility which has this is logrotate using its notifempty configuration option. You can install logrotate on your Mac using Homebrew