2016-03-18 20 views
0

我使用这个插件捆绑的dropwizard将消息记录到一个Graylog服务器: https://github.com/gini/dropwizard-gelfDropwizard GELF记录的appender

它的工作开箱简单地将其添加到pom.xml中,并在其配置我的dropwizard服务器的config.yml。好东西!

唯一的问题是,如果我的Graylog服务器由于某种原因在启动期间不可用,则GelfAppenderFactory会引发RuntimeException并退出dropwizard。从未启动Web服务器,因为日志记录服务器不可用。不好。

任何想法如何解决它?我目前的做法是复制&将GelfAppenderFactory粘贴到我自己的代码中,并将关键部分包装在try/catch块中。这感觉相当粗糙......所以任何帮助,非常感谢。

+1

有几个选项。你可以覆盖DefaultLogFactory并在configure方法中处理它。您可以覆盖ConfigureCommand并在尝试创建日志记录时对其进行处理。 – pandaadb

+0

感谢您的快速响应。不过,我希望能够绕过dropwizard内脏。 – craddack

+0

在这种情况下,看看你的主要班级。在运行方法中,理论上可以将所有内容都包含在一个大规模的尝试中,并分析异常。 – pandaadb

回答

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

但是,现在我可以自由使用(积极开发的)带有Logback配置的插件logstash-gelf(https://github.com/mp911de/logstash-gelf)。

感谢@pandaadb为您提供所有帮助。最后挖掘Dropwizard的内部工作对我来说太麻烦了。

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 
+0

谢谢。不幸的是,这并不能解决我的问题,因为在执行** run之前,在YML中配置的GelfAppender会抛出运行时异常**(如果日志服务器不可访问) – craddack

相关问题