OSCA

Javaのlog4jからSlackにログを通知するライブラリを公開しました

このエントリーをはてなブックマークに追加

 プライベートにおいても仕事においても、コミュニケーションツール「Slack」を利用してコミュニケーションする機会が増えてきました。 その Slack に log4j からログを通知するライブラリを GitHub に公開したので、その経緯などをご紹介します。

Slackにシステムのエラーを通知したい

 Slack をコミュニケーションツールの中核として使っていると「なんでもSlackに通知して欲しい」欲がふつふつと湧いてきました。 チームメンバーとのコミュニケーション以外にも、チームに関係する「通知」を共有したいくなりました。

 CIツールである Jenkins では Slack Plugin が公開されていて、Jenkins の処理結果を Slack に通知できます。 とても便利に利用させてもらっています。 また Redmine にも Slack Plugin があり、更新されたチケットの情報を通知してくれます。

 このように、ツールから Slack に通知してくれる様々な Plugin が公開されていますが、フルスクラッチで開発したシステムからも Slack に情報を通知して欲しいなと思い始めました。 主に通知して欲しいものは、FATAL や ERROR レベルのログです。

Slackへの通知用 Log4j Appender を作成してみた

 システム開発に Java を利用することが多い私は、Java のログライブラリで出力するログを Slack にも通知して欲しいと考えました。 Java のログライブラリと言えば、log4j, backlog, log4j2 などが有名で、その中でも log4j は古株です。 log4j は古いライブラリなので、新しいものを積極的に取り入れているプロジェクトでは「そんな古いもんはもう使わないよ」という方も多いとは思いますが、しかしながら log4j に依存関係があるフレームワークはまだまだ多いのが現状です。 私が関わっているプロジェクトも log4j でログを出力しているものも多く、今回「Slack にログを通知して欲しい」と思ったシステムも log4j を利用していたため、log4j の Slack 用 Appender クラスを作成することにしました。

GitHubに公開しました

 Slack に独自の通知をするためには Incoming WebHooks という API を利用する必要がありますが、今回作成したライブラリも Incoming WebHooks に対して通知を行うものです。 Incoming WebHooks の API 仕様はとてもシンプルなものですので、特に難しい実装もありませんでした。 SlackIncomingWebHooksAppender というクラスを作成しました。

 公開前に、作成した SlackIncomingWebHooksAppender クラスを利用して2週間の運用実験を行いました。 公開しているシステムでエラーが発生するのは望ましいことではないのですが…、2週間の間に見事にシステムエラーを Slack に通知してくれました。

 2週間の運用実績もできたことなので、作成した Appender ライブラリを GitHub で公開しました。 sou4j-log4j というプロジェクトで公開しています。 “sou4j” は、私の個人的なライブラリ作成プロジェクトなのですが、その子プロジェクトとして公開しました。

所感と課題

 利用方法などは GitHub のプロジェクトページに記載してありますので、ここでは割愛します。

 sou4j ライブラリは、Apache Maven を利用してビルド・コンパイルされることを想定して pom.xml を含んでいますし、ライブラリの依存関係も pom.xml に記載しています。 しかしながら、今現在、この sou4j-log4j は Maven Central Repository などには登録していません。 正直なところ、まとまった作業時間がないからです…。 お手数ですが GitHub のプロジェクトページを参考に clone して mvn install でローカルリポジトリにインストールして利用してください。 需要があれば Maven Central Repository への登録も検討したいと思います。

 また、対応時期は未定なのですが、追加で Proxy に対応する実装をしたいと思っています。 log4j.properties, log4j.xml でプロキシサーバーを指定できるようにしたいと思っていますが、作業できる時間の目処がたっていません。 (親切などなたか、プルリクして頂いても結構です)

 そして…「英語」。 今や「GitHubでライブラリを公開するなら、英語でREADME書けや!」という空気を感じます。 そうですよね、分かってます(涙) できるだけ英語でも README を追記したいと思っていますが、これも私の課題です。

 特に工夫もないシンプルなライブラリですが、利用シーンがございましたら是非ご利用ください。

著者 : OSCA

OSCA

個人として何か一つでも世の中の多くの人に使ってもらえるサービスを作ろうと日々奮闘中のエンジニア。 夜景好きのアマチュア写真家でもあります。
Twitter : @oscaphoto
Facebook : OSCA