同事们,你好。我有点困惑。 我在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
答案 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来在控制台中显示日志