我想在log4j2.xml文件中使用重写追加程序,以便在记录之前可以修改日志。我没有从Google获得太多帮助。根据log4j2文档,Rewrite是具有重写方法的接口,而MapRewritePolicy是实现类,当我运行它时,我可以看到我的web3.log文件正在生成,但是看不到日志内容的任何修改。我看到了MapRewritePolicy源代码,并在我的项目中将本地实现类创建为MapRewritePolicyImpl.java,并放置了一些System.out来查看代码流从log4j2.xml文件进入此类。我已经修改了log4j2.xml以使用MapRewritePolicyImpl.java,但是代码流没有进入MapRewritePolicyImpl.java类。
<Rewrite name="rewrite" >
<Appender-Ref ref="web3" />
<MapRewritePolicyImpl">
<KeyValuePair key="creditCard" value="new12345"/>
</MapRewritePolicyImpl>
</Rewrite>
<Configuration monitorInterval="5" status="debug" strict="true">
<Appenders>
<RollingFile name="web3" fileName="../logs/web3.log"
filePattern="${sys:catalina.home}/logs/$${date:yyyy-MM-dd}/web3-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout
pattern="%d{dd/MM/yyyy HH:mm:ss,SSS} [%X{cartID}] [%X{sessionId}] [%p] [%t] [%c] (%F:%L) - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
</RollingFile>
<Rewrite name="rewrite" >
<Appender-Ref ref="web3" />
<MapRewritePolicy">
<KeyValuePair key="creditCard" value="new12345"/>
</MapRewritePolicy>
</Rewrite>
</Appenders>
<Loggers>
<Logger name="com.virginamerica" level="info" additivity="false">
<!-- <Appender-Ref ref="web3" /> -->
<Appender-Ref ref="rewrite"/>
</Logger>
</Loggers>
</Configuration>
MapRewritePolicy将评估包含MapMessage的LogEvent,并添加或更新Map的元素。这仅在您的应用程序调用时有效logger.info(new MapMessage(keyValueMap))
。我怀疑这不是您的应用程序当前正在执行的操作。
通常,您的消息将是SimpleMessage(如果您调用了logger.info("Just a string without parameters")
)或ParameterizedMessage(如果您调用了logger.info("Hi {}!", name)
)。RewriteAppender将无法对SimpleMessage或ParameterizedMessages进行任何操作,因此什么也不会被替换...
您可能想看一下PatternLayout的文档:如果使用replace{pattern}{regex}{substitution}
模式,它可以用一些替换值替换字符串消息中的正则表达式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句