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を待つことができるが, 使い分けることはできない