如何将所有soap CXF
xml请求记录到与我的应用程序中的任何其他日志记录不同的文件中?
log4j.rootLogger=INFO, console, MyFileAppender
log4j.logger.org.apache.cxf=INFO, console
log4j.logger.org.apache.cxf.interceptor.LoggingInInterceptor=INFO, console
log4j.logger.org.apache.cxf.interceptor.LoggingOutInterceptor=INFO, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=INFO
log4j.appender.MyFileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.MyFileAppender.Append=true
log4j.appender.MyFileAppender.Threshold=INFO
log4j.appender.MyFileAppender.File=c:/logs/logs.txt
目前所有日志都转到同一个文件。我只想将请求记录分开。
一般日志记录完成:
Logger.getRootLogger().fatal("UNEXPECTED ERROR:", e);
CXF虽然只是由这些拦截器起作用。我不会自己调用特定的记录器来记录请求。
如何将它们写入不同的日志文件?它们应仅出现在此文件中,而不再出现在常规日志文件中!
答案 0 :(得分:1)
解决方案:log4j.additivity.org.apache.cxf=false
答案 1 :(得分:0)
要记录到不同的文件,您可以使用Log4J NDC or MDC,或者LogBack
中有内置功能使用MDC很简单,您需要在流程开始时在MDC中放置一个键/值,并且还需要在流程结束时将其删除。
//start of flow
MDC.put("keyForCondition", "service 1")
//end of flow
MDC.remove("keyForCondition")
您可以使用此键的值来决定登录客户Appender的文件。
public class MyRollingFileAppender extends RollingFileAppender {
@Override
public void append(LoggingEvent event) {
String condition = (String)event.getMDC("keyForCondition");
String fileName = null;
if(condition == "service 1") {
fileName = "service1.log";
} else if(condition.equals("service 2")) {
fileName = "service2.log";
}
try {
setFile(fileName, fileAppend, bufferedIO, bufferSize);
} catch (IOException ioe) {
System.err.println("Exception while setting service log file ")
}
super.append(event);
}
}