[英]How to add payload (xml response & request logging) to CXF web service?
同事們,你好 我有點困惑。 我在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
然后將記錄器添加到我的\\ src \\ main \\ resources \\ log4j.properties文件中。
看來這就是我所知道的
目前,我的log4j.properties看起來像:
log.dir =。/ logs datetamp = 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 {$ {datestamp}}%-5p%c {1}:%L-%m%n log4j.appender.defaultLog。編碼= 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 {$ {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負載,但是在日志文件中卻沒有。
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.LoggingInInterceptor = TRACE,queryLog 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
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
您可以簡單地將Logger放入Studio的流程中,並將其消息設置為#[payload],或在XML配置模式下添加標簽。 如果有效載荷是一個字符串,則可以直接工作,如果它是一個更復雜的對象,它將僅打印對象引用。
通常,您可以在需要記錄數據之前將對象添加到字符串轉換器。 有時,您將需要對轉換更加有創意-查看Studio中可用的功能,不要害怕嘗試。
如果要公開CXF Web服務,則始終可以使用CXF攔截器 記錄 請求和響應 。
這里顯示了可用於日志記錄的不同CXF日志記錄攔截器:-https: //developer.mulesoft.com/docs/display/current/CXF+Module+Configuration+Reference
是的,在Mule獨立服務器中,您可能需要log4j才能在控制台中顯示日志
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.