エラーログ管理(sasl、error_logger、rb)
erlang でエラーログを管理する方法を調べたのでメモ。
まず、sasl の設定ファイルを作成。適当に elog.config として保存する。
[{sasl, [ {sasl_error_logger, false}, {errlog_type, error}, {error_logger_mf_dir, "/path/to/logs"}, {error_logger_mf_maxbytes, 10485760}, %% 10MB {error_logger_mf_maxfiles, 10} ]}].
Programming Erlang まんまですが・・・これで、error のみ /path/to/logs 配下のファイルに保存し、ファイルのローテーションも行ってくれる。(上記設定で、1 ファイル最大 10MB で 10 ファイルまで保持する)
次に、下記のように erl を実行する。
erl -boot start_sasl -config elog +W w
+W w を付けないと warning のエラータイプが error になるので注意。
で、試してみる。
1> error_logger:info_msg("info message.\n"). =INFO REPORT==== 18-Sep-2007::11:58:30 === info message. ok 2> error_logger:warning_msg("warning message.\n"). =WARNING REPORT==== 18-Sep-2007::11:58:41 === warning message. ok 3> error_logger:error_msg("error message.\n"). =ERROR REPORT==== 18-Sep-2007::11:58:47 === error message. ok 4> rb:start(). rb: reading report...done. {ok,<0.45.0>} 5> rb:list(). No Type Process Date Time == ==== ======= ==== ==== 8 progress <0.30.0> 2007-09-18 11:58:21 7 progress <0.30.0> 2007-09-18 11:58:21 6 progress <0.30.0> 2007-09-18 11:58:21 5 progress <0.30.0> 2007-09-18 11:58:21 4 progress <0.23.0> 2007-09-18 11:58:21 3 info_msg <0.24.0> 2007-09-18 11:58:30 2 warning_msg <0.24.0> 2007-09-18 11:58:41 1 error <0.24.0> 2007-09-18 11:58:47 ok 6> rb:show(3). INFO REPORT <0.40.0> 2007-09-18 11:58:30 =============================================================================== info message. ok 7> rb:list(warning_msg). No Type Process Date Time == ==== ======= ==== ==== 2 warning_msg <0.24.0> 2007-09-18 11:58:41 ok 8> rb:show(error). ERROR REPORT <0.40.0> 2007-09-18 11:58:47 =============================================================================== error message. ok
何かコードを書いた際、error_logger:error_msg/1 や error_logger:error_msg/2 を使ってエラーログを残しておき、rb:show(error). でエラーログを確認するという使い方ができる。