Log4j2的RoutingAppender的通配符模式
我正在尝试使用Log4j2的新RoutingAppender路由基于MDC(Log4j2中的ThreadContext)的不同日志。我想做的是以下几点:
- 如果MDC映射具有$ contextId->追加到$ contextId附加器(特定日志)
- 如果MDC没有$ contextId->追加到主附加程序(常规日志)
我想使用标记中的通配符模式来实现此目的,然后使用for contextId($
{ctx:contextId})中的键参数和主附加器使用默认值(不带键参数)进行过滤,但是我没有知道那个通配符是哪个值。
感谢您提供任何帮助,也许我是从错误的途径来解决这个问题。我一直在阅读有关过滤器的信息,但似乎无法按我的意愿工作。
谢谢!
回答:
感谢链接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>
我要做的是根据要记录的追加程序调用ThreadContext.put(“ contextId”,“”)或ThreadContext.put(“
contextId”,“ something”)。我希望可以迅速实现荒野功能,但与此同时,此解决方案对我来说已经足够。
谢谢!
以上是 Log4j2的RoutingAppender的通配符模式 的全部内容, 来源链接: utcz.com/qa/410295.html