📄 memorypersistencelogobserver.java.svn-base
字号:
package com.infobank.superchannel.observer.implementation;import java.io.ByteArrayOutputStream;import java.io.PrintStream;import java.util.LinkedList;import java.util.List;import java.util.concurrent.atomic.AtomicInteger;import java.util.concurrent.atomic.AtomicReference;import com.infobank.superchannel.observer.ChannelStatusObserver;import com.infobank.superchannel.observer.LogObserver;import com.infobank.superchannel.pojo.ChannelInfo;import com.infobank.superchannel.pojo.GenericLog;import com.infobank.superchannel.pojo.TextMessage;import com.infobank.superchannel.pojo.TextMessageLog;import com.infobank.superchannel.daemon.GenericDaemon;import com.infobank.superchannel.daemon.databasecache.DatabaseCacheDaemon;import com.infobank.superchannel.daemon.messagelauncher.MessageLauncherDaemon;import com.infobank.superchannel.util.DaemonConfiguration;/** * @author Xiaoguang Sun * @version 类说明: MemoryPersistenceLog观察者 */public class MemoryPersistenceLogObserver implements LogObserver { private static int maximumLogSize=100; private List<GenericLog> genericLog=new LinkedList<GenericLog>(); private Object genericLogMutex=new Object(); private static String daemonType=null; public static void init(GenericDaemon daemon){ if(daemon instanceof DatabaseCacheDaemon){ daemonType="DatabaseCache"; } else{ if(daemon instanceof MessageLauncherDaemon){ daemonType="MessageLauncher"; } else throw new RuntimeException("invalid daemon type"); } DaemonConfiguration config=DaemonConfiguration.getInstance(); StringBuilder sb=new StringBuilder(); sb.append("/daemon[@type='"); sb.append(daemonType); sb.append("']/observer[@type='LogObserver']/"); String basePath=sb.toString(); sb=new StringBuilder(); sb.append(basePath); sb.append("capacity[@persistence='Memory']/genericLog"); maximumLogSize=config.getInt(sb.toString()); } private void checkListSize(List list,int maxsize){ int listSize=list.size(); if(listSize>=maxsize){ list.remove(0); } } /** * 取得自上次调用此方发以后新增的所有日志信息 * @return 自上次调用此方发以后新增的所有日志信息 */ public List<GenericLog> getGenericLog(){ List<GenericLog> log=null; synchronized(genericLogMutex){ log=genericLog; genericLog=new LinkedList<GenericLog>(); } return log; } /** * helper method for logging methods * @param log log information * @param level log level */ private void log(String log,GenericLog.LogLevel level){ synchronized(genericLogMutex){ checkListSize(genericLog,maximumLogSize); genericLog.add(new GenericLog(log,level)); } } /** * helper method for logging exception methods * @param ex exception * @param level log level */ private void log(Exception ex,GenericLog.LogLevel level){ synchronized(genericLogMutex){ checkListSize(genericLog,maximumLogSize); ByteArrayOutputStream os=new ByteArrayOutputStream(); ex.printStackTrace(new PrintStream(os)); genericLog.add(new GenericLog(os.toString(),level)); } } /** * 记载调试日志信息 * @param log 调试日志信息 */ public void debug(String log) { log(log,GenericLog.LogLevel.DEBUG); } /** * 记载错误信息 * @param log 错误信息 */ public void error(String log) { log(log,GenericLog.LogLevel.ERROR); } /** * 记载致命错误信息 * @param log 致命错误信息 */ public void fatal(String log) { log(log,GenericLog.LogLevel.FATAL); } /** * 记载一般日志信息 * @param log 一般日志信息 */ public void info(String log) { log(log,GenericLog.LogLevel.INFO); } public void warn(String log) { log(log,GenericLog.LogLevel.WARN); } public void debug(Exception ex) { log(ex,GenericLog.LogLevel.DEBUG); } public void error(Exception ex) { log(ex,GenericLog.LogLevel.ERROR); } public void fatal(Exception ex) { log(ex,GenericLog.LogLevel.FATAL); } public void info(Exception ex) { log(ex,GenericLog.LogLevel.INFO); } public void warn(Exception ex) { log(ex,GenericLog.LogLevel.WARN); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -