Code Search for Developers
 
 
  

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

redshed

Code for Mac+WebObjects.

Project homepage: http://sourceforge.net/projects/redshed
Programming language(s): C,Java,Objective C
License: other

  TestingAppender.java