由于最近做的系统中需要滚动显示最近的100条日志数据,因此需要自定义appender类,通过继承AppenderSkeleton并重写append方法,将想要的日志放入ArrayBlockingQueue队列中,达到滚动显示最近100条日志的目的。
代码如下:
配置文件
将QueueBlocking队列中的数据打印出来,即可显示最新的100条日志记录
代码如下:
public class MyAppender extends AppenderSkeleton{
private static Queue<LoggingEvent> LOG_QUEUE = new ArrayBlockingQueue<LoggingEvent>(100, true);
public static Queue<LoggingEvent> getLOG_QUEUE() {
return LOG_QUEUE;
}
public static void setLOG_QUEUE(Queue<LoggingEvent> lOG_QUEUE) {
LOG_QUEUE = lOG_QUEUE;
}
@Override
protected void append(LoggingEvent event) {
synchronized (this)
{
if (LOG_QUEUE.size() == 100)
{
LOG_QUEUE.poll();
}
//此处可以根据自己的业务添加各种过滤条件,比如显示的日志级别、只显示某个类的日志等等
LOG_QUEUE.add(event);
}
}
配置文件
<appender name="memory" class="com.uuwatch.log4j.MyAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="memory"/>
</root>
将QueueBlocking队列中的数据打印出来,即可显示最新的100条日志记录