我有这样的问题:我在单个wildfly上运行了几个应用程序。我想以某种方式区分(过滤,计数等)日志条目。 在应用程序中我使用slf4j。
我尝试在应用程序启动时设置MDC字段(从启动单例),但wildfly不会记录它。有没有办法让MDC可见或以其他方式区分应用程序?
不过,我们正在使用带有logstash和elasticsearch的SocketAppender - 这可能很重要。提前谢谢。
答案 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>