感谢链接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”)。我希望可以迅速实现荒野功能,但与此同时,此解决方案对我来说已经足够。
谢谢!



