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