0

CXFすべての SOAP 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 はこれらのインターセプターによってのみ機能します。リクエストをログに記録するために特定のロガーを自分で呼び出しているわけではありません。

それらを別のログファイルに書き込むにはどうすればよいですか? それらはこのファイルにのみ表示され、一般的なログファイルには表示されません!

4

2 に答える 2

1

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

于 2013-11-12T10:14:29.180 に答える
0

さまざまなファイルにログを記録するには、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);  
}  
}
于 2013-11-12T09:50:23.327 に答える