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

时间:2015-06-17 06:25:20

标签: java logging mule cxf

同事们,你好。我有点困惑。 我在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

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

似乎我所知道的全部

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

  

log.dir =。/ logs datestamp = 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 {$ {邮戳}}   %-5p%c {1}:%L - %m%n log4j.appender.defaultLog.encoding = UTF-8

     

ERROR log log4j.appender.errorlog = org.apache.log4j.RollingFileAppender

     

log4j.appender.errorlog.Threshold = ERROR   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有效负载,但是在日志文件中没有。

更新2 下一行添加到log4j.properties

  

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

     

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

     

查询日志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 =&#39;。&#39; 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

2 个答案:

答案 0 :(得分:0)

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

通常,您可以在需要记录数据之前将对象添加到字符串转换器。有时你需要对你的转换更有创意 - 查看Studio中可用的内容并且不要害怕进行实验。

答案 1 :(得分:0)

如果您正在公开CXF网络服务,您可以随时使用 CXF拦截器记录 请求和响应

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

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

相关问题