如何使org.apache.cxf.enterceptor.LoggingInInterceptor登录自定义日志文件



在运行org.apache.cxf.enterceptor.LoggingInInterceptor的应用程序中,当前正在将HTTP请求/响应记录到catalina.out.中

我希望它以某种方式将这些信息复制到一个单独的日志文件中。有关于如何做到这一点的建议吗?

想分享对我来说效果很好的最终解决方案。

在应用程序的log4j.properties 中添加了以下内容

log4j.logger.org.apache.cxf.interceptor.LoggingOutInterceptor=INFO, queryLog
log4j.additivity.org.apache.cxf.interceptor.LoggingOutInterceptor=true
log4j.logger.org.apache.cxf.interceptor.LoggingInInterceptor=INFO, queryLog
log4j.additivity.org.apache.cxf.interceptor.LoggingInInterceptor=true
# Query log
log4j.appender.queryLog=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.queryLog.File=/C:/Eclipse-Tomcat/logs/query.log
log4j.appender.queryLog.layout=org.apache.log4j.PatternLayout
log4j.appender.queryLog.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.queryLog.DatePattern = '.'yyyy-MM-dd
log4j.category.queryLogger=INFO, queryLog

这对我来说基本上很好,输入/输出HTTP请求响应记录在catalina.out和query.log中。日志也每天轮换。

根据您使用的日志记录框架,您应该正确配置log4jslf4j<tomcat>/conf/logging.properties文件,为org.apache.cxf.interceptor.LoggingInInterceptor类设置特定的appender。

根据Javadoc,您可以在LoggingInInterceptor构造函数中声明一个新的PrintWriter:

File file = new File("/directory/mylogs.txt");
file.getParentFile().mkdirs();
PrintWriter printWriter = new PrintWriter(file);
LoggingInInterceptor loggingInInterceptor = new LoggingInInterceptor(printWriter);

OP的回答提供的设置对我也有效(谢谢!)但我不得不将LoggingOutInterceptor类名更改为运行服务的类。

因此,代替以下内容:

log4j.logger.org.apache.cxf.interceptor.LoggingOutInterceptor=INFO, queryLog
log4j.additivity.org.apache.cxf.interceptor.LoggingOutInterceptor=true

我需要这个:

log4j.logger.org.apache.cxf.services=INFO, outgoingSOAPMessages
log4j.additivity.org.apache.cxf.services=true

我只是想发个帖子,以防将来对任何人都有帮助。

最新更新