簡體   English   中英

如何將CXF Web服務請求記錄到其他日志文件?

[英]How to log CXF webservice requests to a different logfile?

我如何將所有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只能由這些攔截器起作用。 我自己不是在呼叫特定的記錄器來記錄請求。

如何將它們寫入其他日志文件? 它們應出現在此文件中,而不再出現在常規日志文件中!

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

要登錄到不同的文件,可以使用Log4J NDC或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);  
}  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM