エラーログ管理(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). でエラーログを確認するという使い方ができる。