読者です 読者をやめる 読者になる 読者になる

すがブロ

sugamasaoのhatenablogだよ

macOS Sierra時代のsyslogとの付き合いかた

/var/log/system.log へ書き込まれないのでした

ある調査によると、人間は一日におよそ86400回はsyslogに出力したいと願っているそうです*1

さて例えばlogger コマンドを使って syslog に出力しておく、なんていうことは稀によくあることではないでしょうか。私は稀によくあります。

ところが、MacにおいてSierraにアップグレードしてからというもの、loggerコマンドや何がしかのプログラミング言語を使ったsyslogへの出力を行なってもsyslogーーいわゆる /var/log/system.log へ書き込まれないのでした。

統合されたログ環境

実は macOS Sierra 10.12 あたりを見ると、なんとなくsyslogについて言及されている。

要約すると

  • ASL (Apple System Logger)という統合されたログ環境になったよ
  • 見るなら Console.app を見てね
  • log コマンドでも見れるよ

そんなわけで、loggerコマンドなどで出力したログは虚空に吸い込まれたわけではなく、ASLに出力されているのでした。

ログを検索することもできる

新しくなったconsole.appで logger プロセスからの出力でフィルタリングしつつ、loggerコマンドを実行するとこんな感じで出力される。

f:id:seiunsky:20170406230324p:plain

もちろん、過去に出力されたログを検索することもできる。

また、上記で書いたように log というコマンドも用意されていて*2、それを使うと、例えばこんな風にログを検索することもできる。

% log show --style syslog --predicate 'processImagePath endswith "logger"' --start "2017-04-06 23:02:30"
Skipping info and debug messages, pass --info and/or --debug to include.
Filtering the log data using "processImagePath ENDSWITH "logger""
Timestamp                       (process)[PID]
2017-04-06 23:02:33.918967+0900  localhost logger[51425]: アババババばばばばb

logコマンドについてはまー man log すれば雰囲気はわかると思う。この先は君自身の目で確かめてくれ!

これでsyslogに何も出力されなくて途方にくれなくて済みますね。

*1:要出典

*2:噂では以前は数学のlog関数用のコマンドだった?