Log4j笔记 第九章 封装Log4j
封装log4j要素:
1、对外不暴露log4j的包名和类名。
2、保护日志发生现场LocationInfo(日志发生时的类、方法、类文件及行数)。
3、方便的格式化日志字符串,MessageFormat.format()。
4、保持效率。
5、方便使用。
下面为部分片段,详情见附件。
更多功能,参考org.apache.log4j.logMF和org.apache.log4j.logSF。
public class Logger {private final org.apache.log4j.Logger logger;private Logger(Class<?> clazz) {logger = org.apache.log4j.Logger.getLogger(clazz);}private Logger() {logger = org.apache.log4j.Logger.getRootLogger();}public static Logger getLogger(Class<?> clazz) {return new Logger(clazz);}public static Logger getRootLogger() {return new Logger();}public void debug(Object message) {if (logger.isDebugEnabled()) {forcedLog(logger, Level.DEBUG, message);}}public void debug(Object message, Throwable t) {if (logger.isDebugEnabled()) {forcedLog(logger, Level.DEBUG, message, t);}}public void debug(String pattern, Object... arguments) {if (logger.isDebugEnabled()) {forcedLog(logger, Level.DEBUG, format(pattern, arguments));}}public void debug(String pattern, Throwable t, Object... arguments) {if (logger.isDebugEnabled()) {forcedLog(logger, Level.DEBUG, format(pattern, arguments), t);}}public void assertLog(boolean assertion, String message) {if (!assertion) {forcedLog(logger, Level.ERROR, message);}}private static void forcedLog(org.apache.log4j.Logger logger, Level level, Object message) {logger.callAppenders(new LoggingEvent(FQCN, logger, level, message, null));}private static void forcedLog(org.apache.log4j.Logger logger, Level level, Object message, Throwable t) {logger.callAppenders(new LoggingEvent(FQCN, logger, level, message, t));}private static String format(String pattern, Object... arguments) {return MessageFormat.format(pattern, arguments);}private static final String FQCN;static {FQCN = Logger.class.getName();}}