Servlet Logging
package net.firstpartners.nounit.utility;
/**
* Title: NoUnit - Identify Classes that are not being unit Tested
*
* Copyright (C) 2001 Paul Browne , FirstPartners.net
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* @author Paul Browne
* @version 0.6
*/
import java.io.*;
import javax.servlet.*;
/**
* stores log of system output and system errors
* If Servlet , writes to Servlet Log File.
* If non-Servlet , writes to Output Files Specified in parameters.<BR>
* Class is mainly static , to allow ease of use (one one log file per system!!) ,
* but has a non-static constructor (for use by servlets - so reference to servlet
* log file can be set.
*/
public class Logging {
//Class Level Variables
static String logFileName; // both package level to enable testing
static String errorLogFileName;
static FileWriter logWriter;
static FileWriter errorWriter;
static boolean doLogging=false; //default no logging unless file says otherwise
//For use in Servlet Context Logging
static ServletContext innerContext;
/**
* Constructor for Logging from Servlet
* @param inServletContext used to get access to the Servlet log files
* @exception IOException if it can't create log files
*/
public Logging (ServletContext inServletContext) throws IOException {
//Store incoming Context + Set Logging Flag
this.innerContext= inServletContext;
//Set logging flag
doLogging=true;
}
/**
* do Setup
* @exception IOException if it can't create log files
*/
private static void setup () {
try {
//Check if setup required - ie nothing has been setup before
if (((logFileName==null)&&(errorLogFileName==null))||(innerContext==null))
{
//Set logging flag
doLogging=true;
//Get logging parameters
logFileName= "LogFile.txt";
errorLogFileName = "ErrorLogFile.txt";
//Create the files
logWriter = new FileWriter(logFileName,true); //append data
errorWriter = new FileWriter(errorLogFileName,true); //append
}
} catch (java.io.IOException ie) {
//do nothing - exists to keep method signature simple
//will show up as NullPointerException later
}
}
/**
* Print log of system output
* @param sysOut
*/
public static void printOutput(Object sysOut){
//setup (if required)
setup();
//skip out asap if logging is turned off
if (!doLogging) {return; }
//Check for Servlet Logging
if (innerContext!=null) {
doServletLog(sysOut);
} else {
//do file logging
try {
if (sysOut instanceof Exception) {
logWriter.write(((Exception)sysOut).toString());
logWriter.flush();
}
else {
logWriter.write(sysOut.toString());
logWriter.flush();
}
} catch (java.io.IOException ioe) {
//do nothing - let app continue
}
}
}
/**
* Print log of system errors
* This method catches java.io.IOExceptions internally , so as to give a
* similar method signature to System.out.println. Also should we stop system
* if logging (and only logging) fails?
* @param sysErr
*/
public static void printError(Object sysErr){
//setup (if required)
setup();
//skip out asap if logging is turned off
if (!doLogging) {return; }
//Check for Servlet Logging
if (innerContext!=null) {
doServletLog(sysErr);
} else {
//do file logging
try {
if (sysErr instanceof Exception) {
logWriter.write(((Exception)sysErr).toString());
logWriter.flush();
}
else {
logWriter.write(sysErr.toString());
logWriter.flush();
}
} catch (java.io.IOException ioe) {
//do nothing - let app continue
}
}
}
/**
* private method for handling logging to Servlets
* @param inObject to Log
*/
private static void doServletLog (Object inObject) {
if(inObject instanceof Throwable) {
//Log as Exception
innerContext.log("",(Throwable)inObject);
} else {
//Log as Normal String
innerContext.log(inObject.toString());
}
}
/**
* Prints debug message to system log file.
* Catches java.io.IOExceptions internally, so as to give a
* similar method signature to System.out.println.
*
* @param object Object containing information to display
*/
public static void debug(Object object){
setup();
if (doLogging) {
if (innerContext==null) {
// log debug message to file
try {
try {
logWriter.write(((Exception)object).toString());
}
catch (ClassCastException e) {
logWriter.write(object.toString());
}
logWriter.flush();
} catch (IOException e) {
//do nothing - let app continue
}
} else {
doServletLog(object);
}
}
}
}
Related examples in the same category