6
6

More than 5 years have passed since last update.

wslogi (A websocket logging framework for Erlang/OTP) を作った

Posted at

wslogi (A websocket logging framework for Erlang/OTP) を作った

歌舞伎座.tech#5の時にVoluntasさんがWebsocketを使ったログの話をしていたので, 今更ながら影響されて自作したので紹介する.

レポジトリ soranoba/wslogi
バージョン v0.1.1
ライセンス MIT License

ちなみに, 英語が全然できないのでdocumentの英語はあまり信用してはいけない.

概要

  • websocketでログを取得できる
  • log levelをログ取得者が指定できる
  • ログ取得者はログの収集範囲を指定できる
    • 範囲指定はアクセスパスに依存し, それ以下のパスへのログを全て取得できる
    • e.g. /hoge/pathに対するログは /, /hoge, /hoge/pathで取得可能
  • ログ取得者はフィルターを設定できる

使い方

Erlang (Server)

1. rebarで使用するライブラリに記述
2. websocketの待ちポートを指定する

ok = wslogi:start(8080)

3. 必要に応じて headerを設定する

ok = wslogi:set_headers([{ip, {192,168,0,1}}, {port, 80}])

headerはpid/0に紐付く為, 呼び出し元のプロセス毎に異なる.

4. ログを出力する

_ = wslogi:info("/log", "hoge: ~p~n", ["fugo"])

第一引数で指定したパスより上の階層にアクセスしたclientに対してログを送る.
他のログレベルについてはドキュメント参照

Websocket (Client)

1.websocket用のclientを用意する (開発中はprogrium/wsshを使っていた)
2.アクセスする

wssh localhost:8080/log

この時に指定するURLでログの収集範囲が決まる.
全て取得したい場合は/にアクセスすれば良い.

3.適当にコマンドを叩く
初期状態がstopなのでstartしないとログの収集を開始しない.

コマンド一覧

コマンド 説明
filter add filterを追加する. 内部的にreを使用している
filter remove filterを削除する. 複数同時指定可能
filter show 現在のfilterを出力する
filter header headerでfilterを行う
help 上記のコマンド一覧を出力する
level list 指定可能なlog levelを出力する
level show 現在取得対象のログレベルを出力する
level <number> ログレベルを簡単に指定する. 0が取得なし.
level <level> level listで出力されたlog levelを指定可能
e.g. level debug +info +alert
start ログ出力開始
stop ログ出力停止

ちなみにlevelの指定は+,-なしが それのみにする, +が加える, -が除く.
+, -levelの左に空白なしで繋げる必要あり.

既知のバグ?

  • 末尾呼び出しでログを書き出すと, 正しいモジュール名 / 行番号が取得できない (気がする)
  • 複数ポートでwebsocketを待つことができるが, 使い分けることはできない
6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6