TestingAppender.java from redshed at Krugle
Show TestingAppender.java syntax highlighted
// TestingAppender.java
//
// Copyright (c) 2001 Red Shed Software. All rights reserved.
// by Jonathan 'Wolf' Rentzsch (jon * redshed * net)
//
// Mon Dec 31 2001 wolf: Created.
import java.util.Vector;
import org.apache.log4j.*;
/**
* A custom appender meant for use with unit tests. When activated, it captures
* all logging output and remembers the priority of the messages logged. For
* example, this enables you to pass known bad data to a black box and then test
* to make sure that an error was logged.
*/
public class TestingAppender extends AppenderSkeleton {
private org.apache.log4j.Logger _logger;
private Vector _appenders = new Vector();
private Priority _priority = null;
private boolean _debugFired, _infoFired, _warnFired, _errorFired;
/**
* When constructed, saves off all existing appenders, removes them and adds
* itself. When done, use the release() method to restore the previous
* appender set.
* @param logger The logger to overtake with our sole custom appender. If
* null, uses Logger.getRoot().
*/
public TestingAppender(Logger logger) {
super();
_debugFired = false;
_infoFired = false;
_warnFired = false;
_errorFired = false;
if (logger == null)
logger = (Logger) Logger.getRoot();
_logger = logger;
java.util.Enumeration enumeration = _logger.getAllAppenders();
while (enumeration.hasMoreElements()) {
Appender currentAppender = (Appender) enumeration.nextElement();
System.out.println("saving off appender " + currentAppender);
_appenders.addElement(currentAppender);
_logger.removeAppender(currentAppender);
}
_logger.addAppender(this);
}
/**
* Removes this appender and restores the previously saved off appenders.
*/
public void release() {
_logger.removeAppender(this);
java.util.Enumeration enumeration = _appenders.elements();
while (enumeration.hasMoreElements()) {
Appender currentAppender = (Appender) enumeration.nextElement();
System.out.println("restoring appender " + currentAppender);
_logger.addAppender(currentAppender);
}
}
protected void append(org.apache.log4j.spi.LoggingEvent event) {
if (event.level.toInt() == Priority.DEBUG.toInt())
_debugFired = true;
if (event.level.toInt() == Priority.INFO.toInt())
_infoFired = true;
if (event.level.toInt() == Priority.WARN.toInt())
_warnFired = true;
if (event.level.toInt() == Priority.ERROR.toInt())
_errorFired = true;
}
public void close() {
}
public boolean requiresLayout() {
return false;
}
public boolean anyFired() {
return _debugFired || _infoFired || _warnFired || _errorFired;
}
public boolean debugFired() {
return _debugFired;
}
public boolean infoFired() {
return _infoFired;
}
public boolean warnFired() {
return _warnFired;
}
public boolean errorFired() {
return _errorFired;
}
public Priority greatestFired() {
if (errorFired())
return Priority.ERROR;
if (warnFired())
return Priority.WARN;
if (infoFired())
return Priority.INFO;
if (debugFired())
return Priority.DEBUG;
return null;
}
public boolean isClosed() {
return closed;
}
}
See more files for this project here