2013-05-15 72 views
4

我爲CXF設置了日誌記錄。它正在成功使用log4j進行日誌記錄。作爲測試,我修改了log4j.properties中的設置,其中根記錄器設置爲INFO如何使CXF日誌記錄功能與SOAP消息一起工作?

添加log4j.logger.org.apache.cxf=DEBUG, C會導致CXF日誌記錄出現在日誌文件中。但是,SOAP消息在到達服務器時不會被記錄。我已將cxf.xml設置爲the guide指示。該文件是這樣的:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:cxf="http://cxf.apache.org/core" xsi:schemaLocation="http://cxf.apache.org/core 
    http://cxf.apache.org/schemas/core.xsd http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> 

    <cxf:bus> 
     <cxf:features> 
     <cxf:logging /> 
     </cxf:features> 
    </cxf:bus> 
</beans> 

此文件中,將.war打包時,在/WEB-INF/classes/cxf.xml。根據我的閱讀,這是CXF開始記錄入站和出站消息所必需的。

我:

  1. 成功取代log4j的爲CXF的默認記錄器。
  2. 將日誌功能添加到cxf總線。
  3. 確保CXF組件能夠記錄。
  4. 另外指定的特定記錄器爲可以容許:

    log4j.logger.org.apache.cxf.interceptor.LoggingInInterceptor=DEBUG, C 
    log4j.logger.org.apache.cxf.interceptor.LoggingOutInterceptor=DEBUG, C 
    

原始SOAP消息但是,拒絕記錄到日誌中。我究竟做錯了什麼?

編輯:添加web.xml和applicationContext.xml中的要求

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>cxf</servlet-name> 
     <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>cxf</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <session-config> 
     <session-timeout>60</session-timeout> 
    </session-config> 
</web-app> 

的applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:soap="http://cxf.apache.org/bindings/soap" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee-2.5.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd 
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd" 
    default-dependency-check="none" default-lazy-init="false"> 

<!-- Load the needed resources that are present in the cxf* jars --> 
<import resource="classpath:META-INF/cxf/cxf.xml"/> 
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/> 
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 

<!--Endpoint Info is below here --> 
</beans> 

回答

3

您是否嘗試過將它添加到你的WEB-INF /cxf-servlet.xml?以下配置適用於記錄服務器端消息。

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xmlns:cxf="http://cxf.apache.org/core" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 
    http://cxf.apache.org/core 
    http://cxf.apache.org/schemas/core.xsd"> 

    <import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

    <cxf:bus> 
     <cxf:features> 
      <cxf:logging /> 
     </cxf:features> 
    </cxf:bus> 

    <jaxws:endpoint ... />   
</beans> 

這假定您根據CXF的Writing a service with Spring聲明您的服務。

至於cxf.xml,我認爲這可能是客戶端配置,雖然我找不到任何支持文檔。

+0

我沒有cxf-servlet.xml。 CXF的文檔建議使用application-context.xml,因爲它不會加載所有內容。 http://cxf.apache.org/docs/configuration.html是我一直依賴的指南。 applicationContext.xml具有相同的導入語句,它應該加載該功能,而不管它在哪個配置文件中,對嗎? –

+0

是的,您可以使用cxf-servlet.xml或將其配置爲在web.xml中使用contextConfigLocation自己的文件。無論哪種方式,您應該可以添加日誌記錄功能。如果這仍不起作用,你可以發佈你的web.xml和applicationContext.xml嗎? – Patrick

+0

是的,發佈。現在發佈了三個必要的文件。 cxf.xml,它具有日誌框架信息,由applicationContext.xml導入,並由web.xml聲明。 –