Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将CXF webservice请求记录到不同的日志文件?_Java_Web Services_Log4j_Cxf - Fatal编程技术网

Java 如何将CXF webservice请求记录到不同的日志文件?

Java 如何将CXF webservice请求记录到不同的日志文件?,java,web-services,log4j,cxf,Java,Web Services,Log4j,Cxf,如何将所有soapCXFxml请求记录到与应用程序中任何其他日志记录不同的文件中 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.Logg

如何将所有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(“意外错误:”,e)

不过,CXF只能通过这些拦截器工作。我并不是亲自打电话给特定的记录器来记录请求


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

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

使用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);  
}  
}

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