0

このアドオン バンドルを dropwizard に使用して、Graylog サーバーにメッセージを記録しています: https://github.com/gini/dropwizard-gelf

それを pom.xml に追加し、dropwizard サーバーの config.yml で構成するだけで、すぐに使用できました。素晴らしいもの!

唯一の問題は、Graylog サーバーが何らかの理由で起動時に使用できない場合、GelfAppenderFactory が RuntimeException をスローし、dropwizard が終了することです。ログ サーバーが利用できないという理由だけで、Web サーバーが起動しません。良くない。

どうすればそれを回避できますか?私の現在のアプローチは、GelfAppenderFactory をコピーして自分のコードに貼り付け、重要な部分を try/catch ブロックでラップすることです。それはかなり粗雑に感じます...だから、どんな助けも大歓迎です。

4

2 に答える 2

0

これは、アプリケーションで使用していた構成です。

run(Configuration cofing, Environment env)メソッドで

// GELF Configuration
GelfAppenderFactory gelfAppenderFactory = (GelfAppenderFactory) Iterables.find(configuration.getLoggingFactory().getAppenders(), new Predicate<AppenderFactory>() {
    @Override
    public boolean apply(AppenderFactory input) {
        return input instanceof GelfAppenderFactory;
    }
}, null);

if (gelfAppenderFactory != null) {
    GelfBootstrap.bootstrap(getName(), gelfAppenderFactory.getHost(), gelfAppenderFactory.getPort(), false);
    Thread.currentThread().setUncaughtExceptionHandler(UncaughtExceptionHandlers.systemExit());
}// End GELF configuration

.yamlファイル

logging:
  level: INFO
   appenders:
     - type: console
     - type: gelf
         host: graylog2
         includeFullMDC: true
于 2016-03-20T17:09:56.207 に答える
0

私が望んでいたことを達成するために、dropwizard-gelf の使用をあきらめました。廃止されたプラグイン ( https://github.com/Moocar/logback-gelf )の古いバージョンを使用しているため、これはおそらく良い考えです。

代わりに、dropwizard のロギング構成をリセットし、次のようにクラスパスから logback.xml ファイルをロードするように戻しました。

void reset() {
  ILoggerFactory factory = LoggerFactory.getILoggerFactory();
  LoggerContext context = (LoggerContext)factory;
  context.reset();
  ContextInitializer initializer = new ContextInitializer(context);
  initializer.autoConfig();
}

残念ながら、Dropwizard は Logback の標準的な方法を再度有効にする標準的な方法を提供していません ( https://github.com/dropwizard/dropwizard/pull/567を参照) 。

ただし、現在、(積極的に開発されている) プラグイン logstash-gelf ( https://github.com/mp911de/logstash-gelf ) を Logback 構成で自由に使用できます。

@pandaadb に感謝します。結局、Dropwizard の内部の仕組みを掘り下げることは、私にとっては面倒でした。

于 2016-03-24T16:55:11.113 に答える