繁体   English   中英

如何将有效负载(XML响应和请求日志记录)添加到CXF Web服务?

[英]How to add payload (xml response & request logging) to CXF web service?

同事们,你好 我有点困惑。 我在Mule上有一个简单的数据流,就像这样http://snag.gy/cJkzg.jpg实际上,它是CXF SOAP Web服务。

现在,我需要添加响应并请求xml日志记录,但是我不知道选择哪种方法。 据我从互联网了解,有以下方法:1.添加Mule Logger元素2.在src / main / resources / META-INF / cxf /下(我没有此文件夹),创建一个名为org.apache.cxf.Logger的文件,其中以下内容-

org.apache.cxf.common.logging.Log4jLogger

然后将记录器添加到我的\\ src \\ main \\ resources \\ log4j.properties文件中。

看来这就是我所知道的

目前,我的log4j.properties看起来像:

log.dir =。/ logs datetamp = dd.MM.yyyy HH:mm:ss.SSS log4j.rootLogger = INFO,stdout,defaultLog,errorlog

所有INFO日志log4j.appender.defaultLog = org.apache.log4j.RollingFileAppender

log4j.appender.defaultLog.Threshold = TRACE log4j.appender.file.MaxFileSize = 5MB log4j.appender.file.MaxBackupIndex = 10 log4j.appender.defaultLog.File = $ {log.dir} /serv.log log4j.appender.defaultLog .layout = org.apache.log4j.PatternLayout log4j.appender.defaultLog.layout.ConversionPattern =%d {$ {datestamp}}%-5p%c {1}:%L-%m%n log4j.appender.defaultLog。编码= UTF-8

错误日志log4j.appender.errorlog = org.apache.log4j.RollingFileAppender

log4j.appender.errorlog.Threshold =错误log4j.appender.file.MaxFileSize = 5MB log4j.appender.file.MaxBackupIndex = 10 log4j.appender.errorlog.File = $ {log.dir} /serv.err log4j.appender.errorlog .layout = org.apache.log4j.PatternLayout log4j.appender.errorlog.layout.ConversionPattern =%d {$ {datestamp}}%-5p%c {1}:%L-%m%n

log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Threshold = TRACE log4j.appender.stdout.Target = System.out log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j。 appender.stdout.layout.ConversionPattern =%d {$ {datestamp}}%-5p%c {1}:%L-%m%n log4j.appender.stdout.encoding = UTF-8

如您所见,此属性文件不支持有效负载日志记录。

如何在我的情况下添加请求和响应日志? 我将感谢您提供任何代码示例。
谢谢。

更新

我将拦截器添加到流中:

<?xml version="1.0"?>
<flow name="Flow1" name="Flow1">
        <inbound-endpoint exchange-pattern="request-response" host="localhost" port="45555" path="wserv" name="HTTP"/>
        <jaxws-service serviceClass="com.maya.ws.EndPoindImpl" name="CXF">

         <inInterceptors>
                    <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
                </inInterceptors>
                <outInterceptors>
                    <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
    </outInterceptors>

       </jaxws-service> 

        <component class="com.maya.ws.EndPoindImpl" name="Java"/>
    </flow>

现在我在控制台中有xml负载,但是在日志文件中却没有。

UPDATE 2接下来的行添加到log4j.properties

log4j.logger.org.apache.cxf.interceptor.LoggingOutInterceptor = TRACE,queryLog log4j.additivity.org.apache.cxf.interceptor.LoggingOutInterceptor = true

log4j.logger.org.apache.cxf.interceptor.LoggingInInterceptor = TRACE,queryLog log4j.additivity.org.apache.cxf.interceptor.LoggingInInterceptor = true

查询日志log4j.appender.queryLog = org.apache.log4j.DailyRollingFileAppender

log4j.appender.queryLog.File = $ {log.dir} /queryLog.log log4j.appender.queryLog.layout = org.apache.log4j.PatternLayout log4j.appender.queryLog.layout.ConversionPattern =%d [%t]% -5p%c%x-%m%n log4j.appender.queryLog.DatePattern ='.'yyyy-MM-dd log4j.category.queryLogger = INFO,queryLog

queryLog已创建,但为空。 =(

更新3

我将queryLog添加到

log4j.rootLogger=INFO, stdout, defaultLog, errorlog

现在我在queryLog.log中有有效载荷,但是响应看起来像字符串。 我正在尝试将其转换为漂亮的xml。

任何想法如何在queryLog中转换为漂亮的xml响应字符串?

Payload: <soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body> bla
bla bla bla

您可以简单地将Logger放入Studio的流程中,并将其消息设置为#[payload],或在XML配置模式下添加标签。 如果有效载荷是一个字符串,则可以直接工作,如果它是一个更复杂的对象,它将仅打印对象引用。

通常,您可以在需要记录数据之前将对象添加到字符串转换器。 有时,您将需要对转换更加有创意-查看Studio中可用的功能,不要害怕尝试。

如果要公开CXF Web服务,则始终可以使用CXF拦截器 记录 请求和响应

这里显示了可用于日志记录的不同CXF日志记录拦截器:-https: //developer.mulesoft.com/docs/display/current/CXF+Module+Configuration+Reference

是的,在Mule独立服务器中,您可能需要log4j才能在控制台中显示日志

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM