2015-12-30 115 views
2

我想在log4j2的每条日志消息上附加一个标签(一个字符串),并且该消息将传递给socket serializedlayout进行输出。所以有可能拦截日志消息并添加一些标记(字符串)给它?为每个log4j2日志消息添加一个标签

下面是log4j2.xml

<Socket name="LOGSTASH" host="192.168.0.1" port="4567" immediateFlush="true" > 
     <SerializedLayout /> 
</Socket> 

下面是调用

private static final Logger log = LogManager.getLogger(aClazz.class); 

private void aMethod(){ 
    log.error("ooops"); 
} 

下面是原点输出

method : aMethod() 
class : aClazz 
level : error 
message : ooops 
trace......... 

低于预期输出

method : aMethod() 
class : aClazz 
level : error 
message : [Some String] ooops 
trace......... 

回答

0

由于您使用的是SerializedLayout,因此无法利用将ThreadContext值注入输出字符串的正常机制。但是,您可以将您的SocketAppender包装在RewriteAppender中,然后创建一个自定义重写策略来修改消息,但需要插入ThreadContext值来修改消息。

+0

感谢您的回答,但我发现这篇文章说“RewriteAppender将无法对SimpleMessage或ParameterizedMessages做任何事情”[链接](http://stackoverflow.com/questions/22218832/how-to-使用-log4j2-XML的重写-附加器换修改-LOGEVENT先于它-日志式) – Asher

相关问题