/**
* Copyright (c) 2005-2010 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* $Id: MockLog4jAppender.java 1183 2010-08-28 08:05:49Z calvinxiu $
*/
package org.springside.modules.log;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Logger;
import org.apache.log4j.spi.LoggingEvent;
/**
* 在List中保存日志的Appender, 用于测试日志输出.
*
* 在测试开始前,使用addToLogger方法将此appender添加到需要侦听的logger.
*
* @author calvin
*/
public class MockLog4jAppender extends AppenderSkeleton {
private List<LoggingEvent> logs = new ArrayList<LoggingEvent>();
/**
* 返回之前append的第一个log事件.
*/
public LoggingEvent getFirstLog() {
if (logs.isEmpty()) {
return null;
}
return logs.get(0);
}
/**
* 返回之前append的最后一个log事件.
*/
public LoggingEvent getLastLog() {
if (logs.isEmpty()) {
return null;
}
return logs.get(logs.size() - 1);
}
/**
* 返回之前append的log事件List.
*/
public List<LoggingEvent> getAllLogs() {
return logs;
}
/**
* 清除之前append的log事件List.
*/
public void clearLogs() {
logs.clear();
}
/**
* 将此appender添加到logger中.
*/
public void addToLogger(String loggerName) {
Logger logger = Logger.getLogger(loggerName);
logger.addAppender(this);
}
/**
* 将此appender添加到logger中.
*/
public void addToLogger(Class<?> loggerClass) {
Logger logger = Logger.getLogger(loggerClass);
logger.addAppender(this);
}
/**
* 将此appender从logger中清除.
*/
public void removeFromLogger(String loggerName) {
Logger logger = Logger.getLogger(loggerName);
logger.removeAppender(this);
}
/**
* 将此appender从logger中清除.
*/
public void removeFromLogger(Class<?> loggerClass) {
Logger logger = Logger.getLogger(loggerClass);
logger.removeAppender(this);
}
/**
* 实现AppenderSkeleton的append函数, 将log事件加入到内部的List.
*/
@Override
protected void append(LoggingEvent event) {
logs.add(event);
}
/**
* @see AppenderSkeleton#close()
*/
public void close() {
}
/**
* @see AppenderSkeleton#requiresLayout()
*/
public boolean requiresLayout() {
return false;
}
}