如何使用Log4j记录apachecxfsoap请求和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

我使用的是ApacheCXF框架。 在我的客户机程序中,我需要记录CXF SOAP请求和SOAP响应。 当我使用

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启动时设置这些属性

  • 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
    。我从来没说过你需要