【问题标题】:How to add payload (xml response & request logging) to CXF web service?如何将有效负载(xml 响应和请求日志记录)添加到 CXF Web 服务?
【发布时间】:2015-06-17 06:25:19
【问题描述】:

同学们,你们好。我有点困惑。 我有一个像这样http://snag.gy/cJkzg.jpg 在 Mule 上制作的简单数据流 实际上它是一个 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 日期戳=dd.MM.yyyy HH:mm:ss.SSS log4j.rootLogger=INFO、标准输出、默认日志、错误日志

所有 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{${dateamp}} %-5p %c{1}:%L - %m%n log4j.appender.defaultLog.encoding=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{${dateamp}} %-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{${dateamp}} %-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, 查询日志 log4j.additivity.org.apache.cxf.interceptor.LoggingOutInterceptor=true

log4j.logger.org.apache.cxf.interceptor.LoggingInInterceptor=TRACE, 查询日志 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 已创建但为空。 =(

更新 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

【问题讨论】:

    标签: java logging mule cxf


    【解决方案1】:

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

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

    【讨论】:

    • 我在流中添加了记录器元素,有效负载 。什么也没有发生。看来这并不容易。
    • 您不需要在记录器中为 CXF 日志拦截器添加有效负载 .. 它会在您的控制台中显示请求和响应 .. 您只需要正确配置 log4j .. 您是否在工作室中运行还是独立的?
    • @AnirbanSenChowdhary,看:我添加了 而且,你是绝对正确的,有效载荷显示在控制台中,而不是日志文件中。我在 Anypoint 工作室开发,在本地运行应用程序。
    【解决方案2】:

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

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

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

    【讨论】:

    • 我有 log4j 日志记录。
    • 您可以参考以下内容在 src/resource 文件夹中配置 log4j.xml :- stackoverflow.com/questions/25828634/… 并且可以在独立服务器的控制台中获取请求响应显示..对于工作室,我想你无论如何都可以得到它.. 但如果你不能在 src/resource 文件夹中添加 log4j.xml 文件.. 从上面检查 log4j.xml 的配置链接
    • 我在您的 Mule 配置中发现了一个问题 .. 您在 &lt;jaxws-service serviceClass="com.maya.ws.EndPoindImpl" name="CXF"&gt; 中使用 EndPoindImpl .. 您应该在此处使用接口而不是实现类和您的实现类将在您的&lt;component class="com.maya.ws.EndPoindImpl" name="Java"/&gt; 中,这是正确的
    猜你喜欢
    • 1970-01-01
    • 2022-01-08
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多