I am using the Apache CXF Framework. Inside my client program, I need to log CXF SOAP Requests and SOAP Responses. When I used
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setAddress(host);
factory.setServiceClass(MyService.class);
factory.getInInterceptors().add(new LoggingInInterceptor());
factory.getOutInterceptors().add(new LoggingOutInterceptor());
I got these SOAP Request and SOAP Responses in the console:
Nov 9, 2011 6:48:01 PM org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose
INFO: Outbound Message
---------------------------
ID: 2
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns4:MYResponse
--------------------------------------
But my actual requirement is, instead of printing them to the server console, I need to have them inside the log file.
When I used log4j directly as shown
log4j(factory.getInInterceptors().add(new LoggingInInterceptor()));
log4j(factory.getOutInterceptors().add(new LoggingOutInterceptor()));
It is only printing true
and true
inside the log file.
Could anybody please let me know how to configure this?
Simplest way to achieve pretty logging in Preethi Jain szenario:
In case somebody wants to do this, using Play Framework (and using LogBack http://logback.qos.ch/), then you can configure the application-logger.xml with this line:
For me, it did the trick ;)
You need to create a file named
org.apache.cxf.Logger
(that is:org.apache.cxf
file withLogger
extension) under/META-INF/cxf/
with the following contents:Reference: Using Log4j Instead of java.util.logging.
Also if you replace standard:
with much more verbose:
Apache CXF will pretty print XML messages formatting them with proper indentation and line breaks. Very useful. More about it here.
This worked for me.
Setup log4j as normal. Then use this code:
cxf.xml
org.apache.cxf.Logger
Please check screenshot here
Another easy way is to set the logger like this- ensure that you do it before you load the cxf web service related classes. You can use it in some static blocks.
Then the inbound and outbound messages will be printed to Log4j file instead of the console. Make sure your log4j is configured properly