简体   繁体   English

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

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

Colleagues, hello. 同事们,你好 I'm a little confused. 我有点困惑。 I have a simple dataflow made on Mule like this http://snag.gy/cJkzg.jpg In fact it is a CXF SOAP web service. 我在Mule上有一个简单的数据流,就像这样http://snag.gy/cJkzg.jpg实际上,它是CXF SOAP Web服务。

Now i need to add response and request xml logging, but i don't know which way to select. 现在,我需要添加响应并请求xml日志记录,但是我不知道选择哪种方法。 As i understood from internet there is next approaches: 1. Add Mule Logger element 2. Under src/main/resources/META-INF/cxf/ (I have not this folder) create a file named org.apache.cxf.Logger with the following contents - 据我从互联网了解,有以下方法:1.添加Mule Logger元素2.在src / main / resources / META-INF / cxf /下(我没有此文件夹),创建一个名为org.apache.cxf.Logger的文件,其中以下内容-

org.apache.cxf.common.logging.Log4jLogger

and then add logger into my \\src\\main\\resources\\log4j.properties file. 然后将记录器添加到我的\\ src \\ main \\ resources \\ log4j.properties文件中。

It seems that's all I knew 看来这就是我所知道的

At the current moment my log4j.properties looks like: 目前,我的log4j.properties看起来像:

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

all INFO logs log4j.appender.defaultLog=org.apache.log4j.RollingFileAppender 所有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.encoding=UTF-8 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

ERROR log log4j.appender.errorlog=org.apache.log4j.RollingFileAppender 错误日志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.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 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

As you see this properties file does not support payload logging. 如您所见,此属性文件不支持有效负载日志记录。

How to add request & response logging in my case? 如何在我的情况下添加请求和响应日志? I will be grateful for any code samples. 我将感谢您提供任何代码示例。
Thank you. 谢谢。

UPDATE 更新

I added interceptors into flow: 我将拦截器添加到流中:

<?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>

And now i have xml payloads in console, but noy in log file. 现在我在控制台中有xml负载,但是在日志文件中却没有。

UPDATE 2 Next lines added into log4j.properties 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.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.logger.org.apache.cxf.interceptor.LoggingInInterceptor = TRACE,queryLog log4j.additivity.org.apache.cxf.interceptor.LoggingInInterceptor = true

Query log log4j.appender.queryLog=org.apache.log4j.DailyRollingFileAppender 查询日志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 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 is created but it is empty. queryLog已创建,但为空。 =( =(

UPDATE 3 更新3

I add queryLog to the end of 我将queryLog添加到

log4j.rootLogger=INFO, stdout, defaultLog, errorlog

Now i have payloads in queryLog.log but the response looks as string. 现在我在queryLog.log中有有效载荷,但是响应看起来像字符串。 I'am trying to convert it in pretty xml. 我正在尝试将其转换为漂亮的xml。

Any idea how to convert into pretty xml response string in queryLog? 任何想法如何在queryLog中转换为漂亮的xml响应字符串? :

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

You can simply put a Logger in your flow in the Studio and set its message to #[payload], or add a tag in the XML config mode. 您可以简单地将Logger放入Studio的流程中,并将其消息设置为#[payload],或在XML配置模式下添加标签。 If the payload is a string, that will work directly, if it's a more complex object it will just print the object reference. 如果有效载荷是一个字符串,则可以直接工作,如果它是一个更复杂的对象,它将仅打印对象引用。

Generally you can add an Object to string transformer before you need to log your data. 通常,您可以在需要记录数据之前将对象添加到字符串转换器。 Sometimes you will have to be more creative with your transformations - check out what are available in Studio and don't be afraid to experiment. 有时,您将需要对转换更加有创意-查看Studio中可用的功能,不要害怕尝试。

If you are exposing a CXF web service , you can always use CXF interceptor for logging your Request and Response . 如果要公开CXF Web服务,则始终可以使用CXF拦截器 记录 请求和响应

Here this shows different CXF logging interceptor you can use for logging :- https://developer.mulesoft.com/docs/display/current/CXF+Module+Configuration+Reference 这里显示了可用于日志记录的不同CXF日志记录拦截器:-https: //developer.mulesoft.com/docs/display/current/CXF+Module+Configuration+Reference

And yes, in Mule standalone server, you may need log4j to display the logs in your console 是的,在Mule独立服务器中,您可能需要log4j才能在控制台中显示日志

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

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