Erlangのログ周辺のメモ

Jan 17, 2018

SASL Application

  • OTPのSASL Applicationは、以下の機能を提供する:
    • エラー処理
      • error_loggerモジュール
    • アラーム処理
    • リリース処理
    • レポート閲覧
      • rbモジュール

Erlang -- sasl

  • OTP Applicationと同じく、Applicationの設定を持てる
  • sasl_error_loggerがデフォルトだとttyになっているので、SASLのerror_loggerによる出力は標準出力へ流れる。falseにすると、一切出力しない
    • 端末(普段使っているTerminalは擬似端末)は/dev/tty<N>という名前のデバイスとしてLinux上で扱われる。Linuxプログラミングインターフェース 62章参照
  • 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のログ

Erlang -- run_erl

run_erl.log

  • run_erlの進行状況、警告を出力する
  • デフォルトではファイルサイズは100kb, 5ファイルまで保持される
  • ログファイルがいっぱいになったら、一番古いログファイルを削除して、再利用する

erlang.log.N

  • run_erlが受け取ったErlangアプリケーションの出力を含む、全ての出力が含まれる
  • デフォルトでは1ファイル100kb、5ファイル分保持する
  • 5ファイルまでいったら、1から上書きになる
Retrun to top