Setting up on-the-fly SOAP logs in production
2 years ago
Originally Published: 2007-04-12
Article Number
000061322
Issue
Setting up on-the-fly SOAP logs in production
Resolution

For troubleshooting web services in the field, here are the instructions for adding logging of the SOAP XML to our application log.

Create the file, services.logging.xml, from the pasted xml in notes:

1)     Stop the application server.
2)     Install the services.logging.xml in META-INF/xfire
3)     In the web.xml file, change to XFire config file to point to services.logging.xml.
 Change:
 <param-value>META-INF/xfire/services.xml</param-value>
 to:
 <param-value>META-INF/xfire/services.logging.xml</param-value>
4)     Make sure logging is at ERROR level in log4j.properties, such as so if using a console:
log4j.rootCategory= ERROR, CONSOLE, LOGFILE
       or if no console is used:
log4j.rootCategory= ERROR, LOGFILE
5)     Restart the application and initialize xfire objects by signing in a user.
6)     When needing to log SOAP, open the logManager, http://<server name>:<server port>/pmws_server/logManager, and set class org.codehaus.xfire.util.LoggingHandler to debug level
 a.      In the text box enter ?org.codehaus.xfire.util.LoggingHandler?
 b.      In the new level field, set the level to INFO
 c.      Click on the Alter button
7)     Once you are finished with logging the SOAP, set the level of org.codehaus.xfire.util.LoggingHandler to ERROR.

Note: The application will need to be primed by accessing the xfire objects, such as by signing in a user, before the xfire object will be visible in the logManager.


Notes
Web services
- <beans xmlns="http://xfire.codehaus.org/config/1.0">
- <xfire>
- <inHandlers>
  <handler handlerClass="org.codehaus.xfire.util.dom.DOMInHandler" />
  <handler handlerClass="org.codehaus.xfire.util.LoggingHandler" />
  </inHandlers>
- <outHandlers>
  <handler handlerClass="org.codehaus.xfire.util.dom.DOMOutHandler" />
  <handler handlerClass="org.codehaus.xfire.util.LoggingHandler" />
  </outHandlers>
  </xfire>
- <service>
  <name>AuthService</name>
  <namespace>http://auth.api.ws.passmarksecurity.com</namespace>
  <serviceClass>com.passmarksecurity.ws.api.auth.AuthService</serviceClass>
  <implementationClass>com.passmarksecurity.ws.impl.AuthServiceImpl</implementationClass>
  <style>wrapped</style>
  </service>
- <service>
  <name>AdminService</name>
  <namespace>http://admin.api.ws.passmarksecurity.com</namespace>
  <serviceClass>com.passmarksecurity.ws.api.admin.AdminService</serviceClass>
  <implementationClass>com.passmarksecurity.ws.impl.AdminServiceImpl</implementationClass>
  <style>wrapped</style>
  </service>
  </beans>