我爲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開始記錄入站和出站消息所必需的。
我:
- 成功取代log4j的爲CXF的默認記錄器。
- 將日誌功能添加到cxf總線。
- 確保CXF組件能夠記錄。
另外指定的特定記錄器爲可以容許:
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>
我沒有cxf-servlet.xml。 CXF的文檔建議使用application-context.xml,因爲它不會加載所有內容。 http://cxf.apache.org/docs/configuration.html是我一直依賴的指南。 applicationContext.xml具有相同的導入語句,它應該加載該功能,而不管它在哪個配置文件中,對嗎? –
是的,您可以使用cxf-servlet.xml或將其配置爲在web.xml中使用contextConfigLocation自己的文件。無論哪種方式,您應該可以添加日誌記錄功能。如果這仍不起作用,你可以發佈你的web.xml和applicationContext.xml嗎? – Patrick
是的,發佈。現在發佈了三個必要的文件。 cxf.xml,它具有日誌框架信息,由applicationContext.xml導入,並由web.xml聲明。 –