ぶらっ記ぃ

日本語の練習をしています

typesafe-configでSentryクライアントの設定をできる sentry-config をリリースしました

github.com

そもそもSentryってなに

sentry.io

アプリケーションの例外などのログを溜め込み、集計・可視化を行えるSaaSです。
詳細は割愛。

モチベーション

Sentryのクライアント実装こと、 sentry-java環境変数システムプロパティでの設定方法を提供しています。
しかしながら、Scalaエンジニアを生業としている自分からすると、アプリケーションの設定は application.conf こと、typesafe-config が使われていることがほとんどです。
環境変数システムプロパティ・typesafe-configと、設定が分散してしまい管理が大変だなと感じていました。

そこで、type-safeconfigからSentryの設定を読み込めればいいじゃん!と思い、ライブラリの作成に手を付けました。

使い方

ライブラリの依存を追加

執筆時点では 0.3.0 が最新になります

compile 'com.github.nomadblacky:sentry-config:0.3.0'

Sentryの設定を追加

sentry.properties ファイルに以下を追加して、

factory=com.github.nomadblacky.sentry.config.SentryClientFactory

application.conf に設定を書きます。

sentry {
  dsn = "DSN"
  environment = debug
}

利用する

あとは普通にクライアントを利用するだけです。

import io.sentry.Sentry;
import io.sentry.event.Event;
import io.sentry.event.EventBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class App {

    private static void manualUsage() {
        EventBuilder eventBuilder = new EventBuilder()
                .withMessage("This is a test!")
                .withLevel(Event.Level.INFO);

        Sentry.capture(eventBuilder);
    }

    private static void withLogback() {
        Logger logger = LoggerFactory.getLogger(App.class);

        try (MDC.MDCCloseable closeable = MDC.putCloseable("sampleMdcTag", "Hey!")) {
            logger.warn("WARN from Logback!");
        }
    }

    private static void uncaughtException() {
        throw new RuntimeException("This is an uncaught exception!");
    }

    public static void main(String[] args) {
        manualUsage();
        withLogback();
        uncaughtException();
    }
}

課題

  • 設定項目が網羅されてない・中途半端に穴抜けしている
    • もくもく開発するしかない
  • 一部の設定値の適用にシステムプロパティの上書きを行っている
    • これはコードをちゃんと読んでなかった。直せそう。
  • そもそもapplication.confに設定を逃しているのに、sentry.propertyなどでファクトリの設定が必要なのが微妙
    • どうしよう
  • コードがきたない・びみょう
    • 久しぶりにJava書いたのでゆるして…

初めてMaven Centralにライブラリを公開したのですが、自分の子供のようでちょっと感慨深いものがあります。
ライブラリそのものはまだまだ未熟ですが、少しずつ着実に育てていければと思っています。