我使用spring-integration来处理来自Message队列的消息,使用jms-message-driven-channel-adaptor
将消息放入processMessage
频道。我已配置wire-tap
来拦截消息并将消息记录到日志文件中。
我想仅将有效负载记录到日志文件中,但是当我启动应用程序时,所有应用程序级别日志也会与有效负载一起登录到日志文件中。
以下是spring配置和log4j配置以获取更多详细信息。
Spring配置:
<int-jms:message-driven-channel-adapter
channel="processMessage" destination-name="MyTest.Queue"/>
<int:channel id="processMessage">
<int:interceptors>
<int:wire-tap channel="logger"></int:wire-tap>
</int:interceptors>
</int:channel>
<int:logging-channel-adapter channel="logger" logger-name="myLogger"
level="INFO" log-full-message="true">
</int:logging-channel-adapter>
Log4j配置:
log4j.rootLogger = INFO, myLogger
log4j.appender.myLogger=org.apache.log4j.FileAppender
log4j.appender.myLogger.File=/app/logs/jms.log
log4j.appender.myLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.myLogger.layout.conversionPattern=%m%n
请让我知道我哪里出错。
答案 0 :(得分:0)
如果您希望这些文件转到其他文件,则不应将rootLogger
配置为使用您的appender; rootLogger应该转到另一个appender。
此外,您需要一个记录器类别
log4j.category.myLogger=INFO, myAppender
(将您的appender名称更改为myAppender)。
修改强>
我刚用这个测试过,它按预期工作......
<int:logging-channel-adapter id="loggingChannel" log-full-message="true" logger-name="tapInbound"
level="INFO" />
log4j.rootLogger = INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.conversionPattern=%m%n
log4j.category.tapInbound=INFO, myAppender
log4j.appender.myAppender=org.apache.log4j.FileAppender
log4j.appender.myAppender.File=/tmp/jms.log
log4j.appender.myAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.myAppender.layout.conversionPattern=%m%n
答案 1 :(得分:0)
因为您有Log4J配置,如:
log4j.rootLogger = INFO, myLogger
因此所有类别都使用您的自定义附加程序。
对他们来说可能stdout
:
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%t] [%c] - %m%n