gdaniels 2002/11/26 14:04:16 Modified: java/src/org/apache/axis/handlers LogHandler.java Log: Improve LogHandler to be more configurable, and enable writing to the console. Revision Changes Path 1.37 +76 -22 xml-axis/java/src/org/apache/axis/handlers/LogHandler.java Index: LogHandler.java =================================================================== RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/handlers/LogHandler.java,v retrieving revision 1.36 retrieving revision 1.37 diff -u -r1.36 -r1.37 --- LogHandler.java 18 Sep 2002 16:10:29 -0000 1.36 +++ LogHandler.java 26 Nov 2002 22:04:16 -0000 1.37 @@ -58,7 +58,6 @@ import org.apache.axis.AxisFault; import org.apache.axis.Message; import org.apache.axis.MessageContext; -import org.apache.axis.utils.JavaUtils; import org.apache.axis.utils.Messages; import org.apache.axis.components.logger.LogFactory; @@ -66,52 +65,99 @@ import java.io.FileWriter; import java.io.PrintWriter; +import java.io.IOException; /** + * A simple Handler which logs the request and response messages to either + * the console or a specified file (default "axis.log"). + * + * To use this, deploy it either in both the request and response flows + * (global, service, or transport) or in just the response flow. If deployed + * in both places, you'll also get an elapsed time indication, which can be + * handy for debugging. * * @author Doug Davis ([EMAIL PROTECTED]) + * @author Glen Daniels ([EMAIL PROTECTED]) */ public class LogHandler extends BasicHandler { protected static Log log = LogFactory.getLog(LogHandler.class.getName()); - long start = 0; + long start = -1; + private boolean writeToConsole = false; + private String filename = "axis.log"; + + public void init() { + super.init(); + + Object opt = this.getOption("LogHandler.writeToConsole"); + if (opt != null && opt instanceof String && + "true".equalsIgnoreCase((String)opt)) + writeToConsole = true; + + opt = this.getOption("LogHandler.fileName"); + if (opt != null && opt instanceof String) + filename = (String)opt; + } public void invoke(MessageContext msgContext) throws AxisFault { log.debug("Enter: LogHandler::invoke"); if (msgContext.getPastPivot() == false) { start = System.currentTimeMillis(); } else { - try { - FileWriter fw = new FileWriter( "axis.log", true ); - PrintWriter pw = new PrintWriter( fw ); + logMessages(msgContext); + } + log.debug("Exit: LogHandler::invoke"); + } - Message inMsg = msgContext.getRequestMessage(); - Message outMsg = msgContext.getResponseMessage(); + private void logMessages(MessageContext msgContext) throws AxisFault { + try { + PrintWriter writer = null; - pw.println( "=======================================================" ); - pw.println( "= " + Messages.getMessage("elapsed00", + writer = getWriter(msgContext); + + Message inMsg = msgContext.getRequestMessage(); + Message outMsg = msgContext.getResponseMessage(); + + writer.println( "=======================================================" ); + if (start != -1) { + writer.println( "= " + Messages.getMessage("elapsed00", "" + (System.currentTimeMillis() - start))); - pw.println( "= " + Messages.getMessage("inMsg00", - (inMsg == null ? "null" : inMsg.getSOAPPartAsString()))); - pw.println( "= " + Messages.getMessage("outMsg00", - (outMsg == null ? "null" : outMsg.getSOAPPartAsString()))); - pw.println( "=======================================================" ); - - pw.close(); - } catch( Exception e ) { - log.error( Messages.getMessage("exception00"), e ); - throw AxisFault.makeFault(e); } + writer.println( "= " + Messages.getMessage("inMsg00", + (inMsg == null ? "null" : inMsg.getSOAPPartAsString()))); + writer.println( "= " + Messages.getMessage("outMsg00", + (outMsg == null ? "null" : outMsg.getSOAPPartAsString()))); + writer.println( "=======================================================" ); + + writer.close(); + } catch( Exception e ) { + log.error( Messages.getMessage("exception00"), e ); + throw AxisFault.makeFault(e); } - log.debug("Exit: LogHandler::invoke"); + } + + private PrintWriter getWriter(MessageContext msgContext) throws IOException { + PrintWriter writer; + + // Allow config info to control where we write. + if (writeToConsole) { + // Writing to the console + writer = new PrintWriter(System.out); + } else { + // Writing to a file. + if (filename == null) { + filename = "axis.log"; + } + writer = new PrintWriter(new FileWriter( filename, true )); + } + return writer; } public void undo(MessageContext msgContext) { log.debug("Enter: LogHandler::undo"); try { - FileWriter fw = new FileWriter( "axis.log", true ); - PrintWriter pw = new PrintWriter( fw ); + PrintWriter pw = getWriter(msgContext); pw.println( "=====================" ); pw.println( "= " + Messages.getMessage("fault00") ); pw.println( "=====================" ); @@ -120,5 +166,13 @@ log.error(Messages.getMessage("exception00"), e ); } log.debug("Exit: LogHandler::undo"); + } + + public void onFault(MessageContext msgContext) { + try { + logMessages(msgContext); + } catch (AxisFault axisFault) { + log.error(Messages.getMessage("exception00"), axisFault); + } } };