2012-02-24 27 views
5

我查找了所有消息,但沒有找到明確的答案。cxf入站和出站消息記錄到單獨的日誌文件

如何配置日誌以記錄CXF入站和出站安寧消息?

我有以下設置。

  • 文件org.apache.cxf.Logger與

    org.apache.cxf.common.logging.Log4jLogger 
    
  • applicationContext.xml中具有以下(這聽起來很傻,但它是攔截我能得到的信息輸出的唯一的地方)

    <bean id="abstractLoggingInterceptor" abstract="true"> 
    <property name="prettyLogging" value="true"/> 
    </bean> 
    <bean id="loggingInInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" 
    parent="abstractLoggingInterceptor"/> 
    <bean id="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor" 
    parent="abstractLoggingInterceptor"/> 
    
    <cxf:bus> 
    <cxf:inInterceptors> 
    <ref bean="loggingInInterceptor"/> 
    </cxf:inInterceptors> 
    <cxf:outInterceptors> 
    <ref bean="loggingOutInterceptor"/> 
    </cxf:outInterceptors> 
    <cxf:outFaultInterceptors> 
    <ref bean="loggingOutInterceptor"/> 
    </cxf:outFaultInterceptors> 
    <cxf:inFaultInterceptors> 
    <ref bean="loggingInInterceptor"/> 
    </cxf:inFaultInterceptors> 
    </cxf:bus> 
    

我試圖按照與SLF4J與log4j的這些指令,但唯一的輸出I獲取文件是應用程序日誌消息。我可以在控制檯上看到入站和出站消息。

我可以得到類似於logback.xml的工作,所以我將應用程序日誌和消息日誌分開。示例:http://www.wolfe.id.au/2011/05/20/apache-cxf-logging/

謝謝。

編輯1: 我刪除org.apache.cxf.common.logging.Log4jLogger從我的類路徑,並置於以下我的log4j.xml。它在日誌級別等於INFO時記錄到文件和控制檯。

<appender name="RSLOGFILE" class="org.apache.log4j.RollingFileAppender"> 
<param name="file" value="${project.basedir}/logs/cxf_inout_messages.log"/> 
<param name="MaxFileSize" value="100KB"/> 
<!-- Keep one backup file --> 
<param name="MaxBackupIndex" value="1"/> 
<layout class="org.apache.log4j.PatternLayout"> 
<!-- Print the date in ISO 8601 format --> 
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/> 
</layout> 
</appender> 
<logger name="org.apache.cxf"> 
<level value="ERROR"/> 
<appender-ref ref="RSLOGFILE"/> 
</logger> 

回答

9

假設你正在使用CXF 2.2.8或更高版本,你需要做到以下幾點:

步驟1)含有下列類路徑創建一個文件META-INF/cxf/org.apache.cxf.Logger

org.apache.cxf.common.logging.Slf4jLogger 

如果您使用的是Maven,這個新文件必須在src/main/resources/META-INF/cxf之內,而不是在src/main/webapp之下!

步驟2)如果你想將所有消息記錄,創建CXF LoggingFeature,該prettyLogging屬性設置爲true並把它添加到CXF總線。

步驟3)爲log4j和slf4j-log4j12添加所需的jar文件。如果您正在使用Maven,包括以下相關:

<dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-log4j12</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>${log4j.version}</version> 
    </dependency> 

步驟4)在你log4j.xmlorg.apache.cxf.services日誌級別設置爲INFO,設置additivityFALSE並附加專用的appender:

<!-- level INFO needed to log SOAP messages --> 
<logger name="org.apache.cxf.services" additivity="false"> 
    <level value="INFO" /> 
    <!-- specify a dedicated appender for the SOAP messages --> 
    <appender-ref ref="WS_LOG_FILE" /> 
</logger> 

我創建了一個blog post which explains how to configure CXF for log4j in more detail。這裏

+2

一切都很好,只是一個小紙條: 記得把 「META-INF/CXF/org.apache.cxf.Logger」 下,例如的src/main /資源,而不是 「的src/main/webapp的」像我一樣。這樣它將在類路徑下。 – 2015-08-19 14:40:57

相關問題