Java 如何向CXF web服务添加有效负载(xml响应和请求日志记录)?
各位同事好。我有点困惑。 我在Mule上制作了一个简单的数据流,如下所示 事实上,它是一个CXFSOAPWeb服务 现在我需要添加响应和请求xml日志,但我不知道选择哪种方式。 据我从互联网上了解,还有下一种方法: 1.添加Mule记录器元素 2.在src/main/resources/META-INF/cxf/I下,我没有创建一个名为org.apache.cxf.Logger的文件,该文件包含以下内容-Java 如何向CXF web服务添加有效负载(xml响应和请求日志记录)?,java,logging,mule,cxf,Java,Logging,Mule,Cxf,各位同事好。我有点困惑。 我在Mule上制作了一个简单的数据流,如下所示 事实上,它是一个CXFSOAPWeb服务 现在我需要添加响应和请求xml日志,但我不知道选择哪种方式。 据我从互联网上了解,还有下一种方法: 1.添加Mule记录器元素 2.在src/main/resources/META-INF/cxf/I下,我没有创建一个名为org.apache.cxf.Logger的文件,该文件包含以下内容- org.apache.cxf.common.logging.Log4jLogger 然后
org.apache.cxf.common.logging.Log4jLogger
然后将记录器添加到我的\src\main\resources\log4j.properties文件中
看来我只知道这些
目前,我的log4j.properties如下所示:
log.dir=./logs datestamp=dd.MM.yyyy HH:MM:ss.SSS
log4j.rootLogger=INFO、stdout、defaultLog、errorlog
所有信息日志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.patternalyout
log4j.appender.defaultLog.layout.ConversionPattern=%d{${datestamp}
%-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.patternalyout
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.patternalyout
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>
现在我在queryLog.log中有了有效负载,但响应看起来像字符串。我正在尝试将其转换为漂亮的xml
知道如何在queryLog中转换成漂亮的xml响应字符串吗
Payload: <soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body> bla
bla bla bla
您只需在Studio的流中放置一个记录器,并将其消息设置为[payload],或者在XML配置模式下添加一个标记。如果有效负载是一个字符串,它将直接工作,如果它是一个更复杂的对象,它将只打印对象引用
通常,您可以在需要记录数据之前向字符串转换器添加对象。有时,您必须在转换方面更具创造性—查看Studio中提供的内容,不要害怕尝试。如果您要公开CXF web服务,则始终可以使用CXF侦听器记录您的请求和响应 这里显示了可用于日志记录的不同CXF日志拦截器:-
是的,在Mule standalone server中,您可能需要log4j在控制台中显示日志I在flow中添加logger元素和有效负载。什么也没发生。似乎这并不容易。您不需要在logger for CXF logging interceptor中添加有效负载。。它将在控制台中显示请求和响应。。您只需要正确配置log4j。。您是在studio中运行还是在单机版中运行?@AnirbanSenChowdhary,看:我添加了,您完全正确,负载显示在控制台中,而不是日志文件中。我在Anypoint studio中开发,在本地运行应用程序。我有log4j日志记录。您可以通过参考以下内容在src/resource文件夹中配置log4j.xml:-并且可以在控制台中获得独立服务器的请求-响应显示。。对于studio,我想你无论如何都可以得到它。。但是,如果您无法将log4j.xml文件添加到src/resource文件夹中。。从上面的链接检查log4j.xml的配置,我发现您的Mule配置中存在问题。。您正在您的..中使用EndPoindImpl。。您应该在这里使用接口而不是实现类,并且您的实现类将位于正确的位置
Payload: <soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body> bla
bla bla bla