package com.cwa.log.queue.service; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import org.apache.log4j.Logger; import com.cwa.log.manage.Config; import com.cwa.log.queue.domain.BaseLog; import com.cwa.log.queue.persistence.LogDAO; import com.cwa.log.task.TaskCallbackHandler; import com.cwa.log.task.TaskManager; /** * @author Pai * @descirption 队列操作 12.12.24 */ public class LogService { private final static Logger logger = Logger.getLogger(LogDAO.class); private static LogService instance = new LogService(); private final Queue<BaseLog> logQueue = new ConcurrentLinkedQueue<BaseLog>(); private TaskCallbackHandler schedulePeriodicTask; private final LogDAO logDao = new LogDAO(); private LogService() { } public static LogService getInstance() { return instance; } /** * 启动日志服务器的计划任务 */ public void start() { if (logger.isInfoEnabled()) logger.info("启动日志计划任务"); schedulePeriodicTask = TaskManager .getInstance() .getCommonTaskService() .scheduleAtFixedRate(new LogBatchTask(), Config.LOG_TASK_DELAY, Config.LOG_TASK_PERIOD); } /** * 停止日志服务器 */ public void shutdown() { TaskManager.getInstance().shutDownAll(); if (schedulePeriodicTask != null) { schedulePeriodicTask.cancel(); } if (logger.isInfoEnabled()) logger.info("停止日志计划任务"); schedulePeriodicTask.cancel(); storeLog(); } /** * 添加消息到队列中 * * @param obj */ public void addLog(BaseLog obj) { // logger.info("gamelog start join queue"); this.logQueue.offer(obj); } /** * 执行发送日志的方法,由计划任务调用 */ protected void storeLog() { logDao.batchSave(logQueue); // logger.info("gamelog sending"); } }