如何使用Log4j记录apachecxfsoap请求和Soap响应?
我使用的是ApacheCXF框架。 在我的客户机程序中,我需要记录CXF SOAP请求和SOAP响应。 当我使用如何使用Log4j记录apachecxfsoap请求和Soap响应?,log4j,cxf,Log4j,Cxf,我使用的是ApacheCXF框架。 在我的客户机程序中,我需要记录CXF SOAP请求和SOAP响应。 当我使用 JaxWsProxyFactoryBean工厂=新的JaxWsProxyFactoryBean(); 工厂设置地址(主机); setServiceClass(MyService.class); factory.getInInterceptors().add(新的LogginInterceptor()); factory.getOutiterCeptors().add(新的Loggin
JaxWsProxyFactoryBean工厂=新的JaxWsProxyFactoryBean();
工厂设置地址(主机);
setServiceClass(MyService.class);
factory.getInInterceptors().add(新的LogginInterceptor());
factory.getOutiterCeptors().add(新的LoggingOutiterCeptor());
我在控制台中得到了这些SOAP请求和SOAP响应:
Nov 9, 2011 6:48:01 PM org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
INFO: Outbound Message
---------------------------
ID: 2
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns4:MYResponse
--------------------------------------
它仅在日志文件中打印true
和true
有人能告诉我如何配置吗?您需要在
/META-INF/cxf/
下创建一个名为org.apache.cxf.Logger
(即:org.apache.cxf
文件,扩展名为Logger
)的文件,内容如下:
org.apache.cxf.common.logging.Log4jLogger
参考文献:
此外,如果替换标准:
详细得多:
ApacheCXF将漂亮地打印XML消息,并使用适当的缩进和换行符对其进行格式化。非常有用。关于它的更多信息。另一个简单的方法是像这样设置记录器-确保在加载cxf web服务相关类之前这样做。您可以在一些静态块中使用它
YourClientConstructor(){
LogUtils.setLoggerClass(org.apache.cxf.common.logging.Log4jLogger.class);
URL wsdlURL=您的URL//
//创建服务
YourService=newyourservice(wsdlURL,服务名称);
port=yourService.getServicePort();
Client Client=ClientProxy.getClient(端口);
client.getInInterceptors().add(新的logginInterceptor());
client.getOutiterCeptors().add(新的LoggingOutiterCeptor());
}
然后,入站和出站消息将打印到Log4j文件,而不是控制台。确保您的log4j配置正确在Preethi Jain szenario中实现良好登录的最简单方法:
loggininterceptor loggininterceptor=新的loggininterceptor();
LogginInterceptor.setPrettyLogging(真);
LoggingOutiterCeptor LoggingOutiterCeptor=新的LoggingOutiterCeptor();
loggingOutInterceptor.setPrettyLogging(true);
factory.getInInterceptors().add(logginInterceptor);
factory.getOutiterCeptors().add(LoggingOutiterCeptor);
在配置log4j.properties
时,将org.apache.cxf
日志级别设置为INFO
足以查看普通SOAP消息:
log4j.logger.org.apache.cxf=INFO
调试太冗长。cxf.xml
org.apache.cxf.Logger
org.apache.cxf.common.logging.Log4jLogger
请检查spring上下文中的屏幕截图,下面的配置将记录请求和响应soap消息
<bean id="loggingFeature" class="org.apache.cxf.feature.LoggingFeature">
<property name="prettyLogging" value="true" />
</bean>
<cxf:bus>
<cxf:features>
<ref bean="loggingFeature" />
</cxf:features>
</cxf:bus>
尝试以下代码:
// LOGGING
LoggingOutInterceptor loi = new LoggingOutInterceptor();
loi.setPrettyLogging(true);
LoggingInInterceptor lii = new LoggingInInterceptor();
lii.setPrettyLogging(true);
org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy.getClient(isalesService);
org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();
cxfEndpoint.getOutInterceptors().add(loi);
cxfEndpoint.getInInterceptors().add(lii);
EndpointImpl impl=(EndpointImpl)Endpoint.publish(地址,实现者);
impl.getServer().getEndpoint().getInInterceptors().add(新的LogginInterceptor());
impl.getServer();
在logback.xml
中,需要输入webservice的接口名称:
螺纹名称
未知的
logger.contains(“InterfaceWebServiceSoap”)
否认
中立的
痕迹
${LOGGING\u PATH}/${threadName}.log
${ARCHIVING_PATH}/%d{yyyy-MM-dd}.${threadName}%i.log.zip
30
50MB
%日期{dd-MM-yyyy HH:MM:ss.SSS}|%5level}%60([%logger{53}:%line]):%msg%ex{full}%n
如果有人想使用Play Framework(并使用LogBack)执行此操作,则可以使用以下行配置application-logger.xml:
<logger name="org.apache.cxf" level="DEBUG"/>
对我来说,它成功了;) 这对我很有效
将log4j设置为正常。然后使用以下代码:
// LOGGING
LoggingOutInterceptor loi = new LoggingOutInterceptor();
loi.setPrettyLogging(true);
LoggingInInterceptor lii = new LoggingInInterceptor();
lii.setPrettyLogging(true);
org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy.getClient(isalesService);
org.apache.cxf.endpoint.Endpoint cxfEndpoint = client.getEndpoint();
cxfEndpoint.getOutInterceptors().add(loi);
cxfEndpoint.getInInterceptors().add(lii);
使用
log4j
logger对SOAP/REST请求/响应的客户端/服务器日志进行全局设置的过程。
通过这种方式,您可以为整个应用程序设置日志记录,而无需更改代码、war、jar文件等
cxf-rt-features-logging-X.Y.Z.jar安装到您的CLASS_路径中
/opt/cxf/cxf logging.xml
):
org.apache.cxf
(log4j 1.x)log4j.logger.org.apache.cxf=INFO设置日志,您的附录程序
java-Dcxf.config.file.url=file:///opt/cxf/cxf-logging.xml -Dorg.apache.cxf.Logger=org.apache.cxf.common.logging.Log4jLogger-Dcom.sun.xml.ws.transport.http.HttpTransportPipe.dump=true-Dcom.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump=true-Dcom.sun.xml.ws.transport.http.HttpAdapter.dump=true-Dcom.sun.xml.internal.ws.transport.http.HttpAdapter.dump=true…
我不知道为什么,但也有必要设置变量
com.sun.xml.
你好,托马斯,目前在META-INF文件夹下,我有一个名为MANIFEST.MF的文件。您的意思是在META-INF下添加一个cxf文件夹吗??请告诉我如何创建这个文件org.apache.cxf.Logger??是的,在/META-INF
中创建/cxf
文件夹,并将扩展名为org.apache.cxf
的文件放在那里。另请参阅我的更新。该文件必须命名为org.apache.cxf
,扩展名为Logger
。据我所知,您创建了一个文件\META-INF\cxf\org\apache\cxf\Logger.class
,而不是\META-INF\cxf\org.apache.cxf.Logger
。我从来没说过你需要