macOSでターミナルログをnewsyslogでローテーションする
私は普段ターミナルをのログを残ようにしている。
しかし、このログが溜まってきたので対処しよとう思う。
現状のサイズを確認する
% du -sh Desktop/logsave
16G Desktop/logsave
ログファイルだけで16GBもつかってるのか…
ということで、ログローテションを導入することにした。
macOSではlogrotateではなくnewsyslogを使う
最初はLinuxのように、/etc/logrotate.d/に設定を置けばいいだろうと思っていましたが、
macOSではlogrotateではなく、newsyslogを使用する模様。
しかもフォーマットも異なると…
設定ファイルを作成する
ということで、newsyslogは以下の設定とすることとした。
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
/Users/kaz/Desktop/logsave/*.log root:wheel 644 12 * $M1D0 ZG
newsyslogのフォーマットやコマンド操作については、以下のサイトを参考にした。
https://wiki.rookie-inc.com/os/freebsd/tips/newsyslog
https://nxmnpg.lemoda.net/ja/8/newsyslog#4
設定の確認をする
% sudo newsyslog -nv
/Users/kaz/Desktop/logsave/20221010_181814.Default.w1t0p0.B127F008-5E95-492E-AA8E-332D2E6BF9C5.868.233518850.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20221015_224727.Default.w0t0p0.B823F428-2C6A-452E-86C8-7F5FC9CEFAB8.4007.3282214398.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20221016_135721.Default.w0t0p0.B9F5CDFA-7B8D-4B72-B6D3-3A3DF8A8885B.4007.3956408280.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20221206_232829.Default.w0t0p0.BB00B7A8-2E64-4635-9094-A5A5DCAE1190.872.2928957415.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20221230_200534.Default.w0t0p0.57661392-14B8-4D89-BEFC-617DD7C7D857.2591.2829962603.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20221230_200747.Default.w0t0p0.BD57BA52-C0EC-423F-972C-89A29903EAAC.2591.1173385807.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20230103_162248.Default.w0t0p0.4A75F957-B7AD-45F1-83E3-7A0E6FE3AC85.22360.2123850268.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20230122_135538.Default.w0t0p0.591D8FE0-A4EE-4423-A27C-3ED5D7A8610A.2613.3745792326.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
/Users/kaz/Desktop/logsave/20230207_221505.Default.w0t0p0.E8408879-46DD-406E-8A00-E2363B6C290D.13268.2897994216.log <12Z>: --> will trim at Sat Nov 1 00:00:00 2025
〜〜
Sat Nov 1 00:00:00 2025と11/1 0時にローテートされることが確認できた。
手動実行する
毎月1日0時に動くことは分かったので、16GBも使用してるので今回は手動実行でローテーションしていこうと思う。
・dry-run
% sudo newsyslog -nv -f /etc/newsyslog.d/terminallog.conf
・実行
% sudo newsyslog -v -F -f /etc/newsyslog.d/terminallog.conf
〜〜
Signal all daemon process(es)...
Notified daemon pid 613 = /var/run/syslog.pid
Pause 10 seconds to allow daemon(s) to close log file(s)
Compress all rotated log file(s)...
% du -sh Desktop/logsave
5.9G Desktop/logsave
5.9GBまで減らすことができた。
newsyslog は元ファイルを削除しない
手動でローテーションを実行した結果、以下のように.0.gzファイルが生成された。
-rw-r--r--@ 1 root wheel 91 Oct 19 04:42 _20250820220423.log
-rw-r--r--@ 1 root wheel 249 Oct 19 04:42 _20250825105433.log.0.gz
-rw-r--r--@ 1 root wheel 91 Oct 19 04:42 _20250825105433.log
-rw-r--r--@ 1 root wheel 163 Oct 19 04:42 _20250825193713.log.0.gz
-rw-r--r--@ 1 root wheel 91 Oct 19 04:42 _20250825193713.log
-rw-r--r--@ 1 root wheel 247 Oct 19 04:42 _20251003132104.log.0.gz
-rw-r--r--@ 1 root wheel 91 Oct 19 04:42 _20251003132104.log
newsyslogの場合、ローテーション後も同名の空ログファイルが再作成される仕様になっている模様(GPT調べ)
homebrewでlogrotateをインストールして使用できるっぽいので、これからやる際はこっちが良さそう…
https://formulae.brew.sh/formula/logrotate
以上