/** * Copyright (c) 2005-2009 springside.org.cn * * Licensed under the Apache License, Version 2.0 (the "License"); * * $Id: QueueAppender.java 1189 2010-09-01 17:24:12Z calvinxiu $ */ package org.springside.examples.showcase.log.appender; import java.util.concurrent.BlockingQueue; import org.apache.log4j.helpers.LogLog; import org.apache.log4j.spi.LoggingEvent; import org.springside.examples.showcase.queue.QueuesHolder; /** * 轻量级的Log4j异步Appender. * * 将所有消息放入QueueManager所管理的Blocking Queue中. * * @see QueuesHolder * * @author calvin */ public class QueueAppender extends org.apache.log4j.AppenderSkeleton { protected String queueName; protected BlockingQueue<LoggingEvent> queue; /** * AppenderSkeleton回调函数, 事件到达时将时间放入Queue. */ @Override public void append(LoggingEvent event) { if (queue == null) { queue = QueuesHolder.getQueue(queueName); } boolean sucess = queue.offer(event); if (sucess) { LogLog.debug("put event to queue success:" + new LoggingEventWrapper(event).convertToString()); } else { LogLog.error("Put event to queue fail:" + new LoggingEventWrapper(event).convertToString()); } } /** * AppenderSkeleton回调函数,关闭Logger时的清理动作. */ public void close() { } /** * AppenderSkeleton回调函数, 设置是否需要定义Layout. */ public boolean requiresLayout() { return false; } /** * Log4j根据getter/setter从log4j.properties中注入同名参数. */ public String getQueueName() { return queueName; } /** * @see #getQueueName() */ public void setQueueName(String queueName) { this.queueName = queueName; } }