0

如何将所有soap CXFxml请求记录到与我的应用程序中的任何其他日志记录不同的文件?

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 虽然只是由这些拦截器工作。我自己并没有调用特定的记录器来记录请求。

如何将它们写入不同的日志文件?它们应该出现在此文件中,而不再出现在一般日志文件中!

4

2 回答 2

1

解决方案:log4j.additivity.org.apache.cxf=false

于 2013-11-12T10:14:29.180 回答
0

要登录到不同的文件,您可以使用 Log4J NDC 或 MDC ,或者在LogBack中有一个内置功能

使用 MDC 很简单,您需要在流程开始时将键/值放入 M​​DC 中,还需要在流程结束时将其删除。

//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);  
}  
}
于 2013-11-12T09:50:23.327 回答