hve*_*iga 6 java logging log4j log4j2
我试图使用Log4j2的新RoutingAppender基于MDC(Log4j2中的ThreadContext)路由不同的日志.我想做的是以下内容:
我想在标记中使用通配符模式实现此目的,然后使用for contextId($ {ctx:contextId})中的key参数进行过滤,并使用默认(不带键参数)作为主appender,但是我没有知道哪个值是那个通配符.
任何帮助表示赞赏,也许我正在走错路.我一直在阅读关于过滤器但似乎没有按我的意愿工作.
谢谢!
感谢 Remko 的链接,我找到了一个临时解决方案,直到 Log4j2 的人员改进该功能。解决方案是同时使用 RoutingAppender 和 Filters。这就是我的 log4j2 配置的样子(我定义了属性,但我没有在此处显示它们):
<appenders>
<appender name="applicationAppender" type="RollingFile" fileName="${logFileName}" filePattern="${logFileNamePattern}" bufferedIO="true" immediateFlush="true" append="true">
<layout type="PatternLayout" pattern="${logPattern}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="${logFileSize}" />
</Policies>
<DefaultRolloverStrategy max="${logFileCount}" />
</appender>
<Routing name="contextSpecificAppender">
<Routes pattern="$${ctx:contextId}">
<Route>
<appender name="Rolling-${ctx:contextId}" type="RollingFile" fileName="logs/${ctx:contextId}.log" filePattern="${logFileNamePattern}" bufferedIO="true" immediateFlush="true" append="true">
<layout type="PatternLayout" pattern="${logPattern}" />
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="${logFileSize}" />
</Policies>
<DefaultRolloverStrategy max="${logFileCount}" />
</appender>
</Route>
</Routes>
</Routing>
</appenders>
<loggers>
<root level="info">
<appender-ref ref="contextSpecificAppender">
<ThreadContextMapFilter onMatch="DENY" onMismatch="ACCEPT">
<KeyValuePair key="contextId" value="" />
</ThreadContextMapFilter>
</appender-ref>
<appender-ref ref="applicationAppender">
<ThreadContextMapFilter onMatch="ACCEPT" onMismatch="DENY">
<KeyValuePair key="contextId" value="" />
</ThreadContextMapFilter>
</appender-ref>
</root>
</loggers>
Run Code Online (Sandbox Code Playgroud)
我所做的是根据我想要记录的附加程序调用 ThreadContext.put("contextId", "") 或 ThreadContext.put("contextId", "something") 。我希望狂野的功能能够尽快实现,但与此同时,这个解决方案对我来说已经足够了。
谢谢!