ようへいの日々精進XP

よかろうもん

Python logger の Slack Handler を試す(Incoming Webhook 編)

tl;dr

Python スクリプトで logger を使って吐いているログを Slack に通知したいと思ったのでメモ。


memo

色々ある

Slack にメッセージを飛ばすモジュールは色々あるけど、Slack API を生で叩くモジュールが多い印象。logger のハンドラとして利用出来て、且つ、Incoming Webhook で利用出来そうなのが今回試した slack_log_handler だった。

参考

pypi.python.org

インストール

requirements.txt に以下のように書いてから...

slack_log_handler

インストールを実行。

sudo pip install -r requirements.txt

サンプル

実行例

コンソール上で。ログは標準出力に。

$ export WEBHOOK_URL=https://hooks.slack.com/services/xxxxxx/xxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxx
$ python test.py debug
2016-02-21 02:15:50,466 [DEBUG] Debug です
$ python test.py info
2016-02-21 02:15:55,799 [INFO] Info です
$ python test.py warn
2016-02-21 02:16:15,875 [WARNING] Warn です
$ python test.py error
2016-02-21 02:16:20,877 [ERROR] Error です
$ python test.py crit
2016-02-21 02:16:26,205 [CRITICAL] Critical です

Slack 同じようにログが飛んでいる。

f:id:inokara:20160221021813p:plain

各ログレベル毎にアイコンが違うのがシャレオツ。

ユーザー名とかアイコンとかどんな風に設定するのか

以下のように Slack Handler を初期化する時に指定するようだ。

slack = SlackLogHandler(
    os.getenv('WEBHOOK_URL'),
    username = 'foobar',
    emojis = {
        logging.INFO: ':grinning:',
        logging.WARNING: ':white_frowning_face:',
        logging.ERROR: ':persevere:',
        logging.CRITICAL: ':confounded:',
    }
)

以下のように。

f:id:inokara:20160221082720p:plain


さいごに

Handler であること

ログの吐き出し先を標準出力、ファイルや Slack 等統一したインターフェースで放り込めるのがイイ(と思う。)

以上

メモでした。