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);
+ }
}
};