在wildfly日志中区分日志条目

时间:2015-02-02 17:39:15

标签: java logging slf4j logstash wildfly

我有这样的问题:我在单个wildfly上运行了几个应用程序。我想以某种方式区分(过滤,计数等)日志条目。 在应用程序中我使用slf4j。

我尝试在应用程序启动时设置MDC字段(从启动单例),但wildfly不会记录它。有没有办法让MDC可见或以其他方式区分应用程序?

不过,我们正在使用带有logstash和elasticsearch的SocketAppender - 这可能很重要。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

尝试https://github.com/mp911de/logstash-gelf

logstash-gelf包含一个JBoss7 / Wildfly8模块和LogHandler,用于评估MDC并允许您添加静态值。您可以下载http://search.maven.org/remotecontent?filepath=biz/paluch/logging/logstash-gelf/1.6.0/logstash-gelf-1.6.0-logging-module.zip并将其放入WildFly服务器的modules目录中。

MDC对于Web应用程序来说是一种很好的方法。如果您的应用程序自己创建线程(MDB,AsyncEJB,Timer / Scheduler),则需要在应用程序处理开始之前设置MDC(例如,关于MDB的消息)。

如果您的应用程序使用来自不同包(不同记录器名称)的记录器,您可以使用可帮助您识别应用程序的属性创建不同的GELF LogHandler。 示例配置可能如下所示:

<custom-handler name="GelfLoggerForApp1" class="biz.paluch.logging.gelf.jboss7.JBoss7GelfLogHandler" module="biz.paluch.logging">
    <level name="INFO" />
    <properties>
        <property name="host" value="udp:localhost" />
        <property name="port" value="12201" />
        <property name="facility" value="YourApp1" />
        <property name="includeFullMdc" value="true" />
    </properties>
</custom-handler>

<custom-handler name="GelfLoggerForApp2" class="biz.paluch.logging.gelf.jboss7.JBoss7GelfLogHandler" module="biz.paluch.logging">
    <level name="INFO" />
    <properties>
        <property name="host" value="udp:localhost" />
        <property name="port" value="12201" />
        <property name="facility" value="YourApp2" />
        <property name="includeFullMdc" value="true" />
    </properties>
</custom-handler>

...

<logger category="com.app1">
    <handlers>
        <handler name="GelfLoggerForApp1"/>
    </handlers>
</logger>

<logger category="com.app2">
    <handlers>
        <handler name="GelfLoggerForApp2"/>
    </handlers>
</logger>