SASL Application
- OTPのSASL Applicationは、以下の機能を提供する:
- エラー処理
error_logger
モジュール
- アラーム処理
- リリース処理
- レポート閲覧
rb
モジュール
- エラー処理
- OTP Applicationと同じく、Applicationの設定を持てる
sasl_error_logger
がデフォルトだとtty
になっているので、SASLのerror_loggerによる出力は標準出力へ流れる。false
にすると、一切出力しない- 端末(普段使っているTerminalは擬似端末)は
/dev/tty<N>
という名前のデバイスとしてLinux上で扱われる。Linuxプログラミングインターフェース 62章参照
- 端末(普段使っているTerminalは擬似端末)は
errlog_type
がデフォルトだとall
になっているため、ErrorレポートとProgressレポート(Supervisorの起動とかのログ)両方出る。error
,progress
にして絞ることができるutc_log
がデフォルトだとfalse
になっているが、true
にするとログの時刻をUTCにすることができる
後述するlagerに、error_logger
のリダイレクト機能があるので、lagerを使うのであれば、saslのerror_loggerの出力はオフにしておいてよさそう。
%% 省略…
{sasl, [
{sasl_error_logger, false}
]},
%% 省略…
lager
lagerでよく使いそうな設定のメモ。
JSON形式のログ
アプリケーションのログはJSONに統一して、ログ収集MWへ転送するみたいな運用をしているところは多いと思う。自分のところも、アプリケーションとかMWのログを共通のログ収集MWに送ってクエリかけて閲覧できるようにしている。
lagerを使っている場合は、lager_file_backend
でログのファイル出力設定を書くことができるので、ここで設定する。
lager_json_formatterというモジュールがあるので、これを利用する場合は以下のようにformatter
で指定すれば簡単にJSON形式でログ出力できる。
%% 省略…
{lager, [
{log_root, "logs"},
{lager_file_backend,
[{file, "ddebug.log"},
{level, debug},
{formatter, lager_json_formatter},
{formatter_config, [ %% 省略…
error_loggerの転送
https://github.com/erlang-lager/lager/blob/master/src/lager.app.src
デフォルトだと、saslのerror_loggerのリダイレクトが有効になっていて、crash reportとかもlagerのログとして扱ってくれるけど、別管理にしたいときは個別に設定できる。
%% 省略…
{lager, [
{error_logger_redirect, false},
%% 省略…
run_erlのログ
run_erl.log
- run_erlの進行状況、警告を出力する
- デフォルトではファイルサイズは100kb, 5ファイルまで保持される
- ログファイルがいっぱいになったら、一番古いログファイルを削除して、再利用する
erlang.log.N
- run_erlが受け取ったErlangアプリケーションの出力を含む、全ての出力が含まれる
- デフォルトでは1ファイル100kb、5ファイル分保持する
- 5ファイルまでいったら、1から上書きになる