首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Log4j札记 第九章 封装Log4j

2012-12-20 
Log4j笔记 第九章 封装Log4j封装log4j要素:1、对外不暴露log4j的包名和类名。2、保护日志发生现场LocationInf

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();}}

1 楼 bluepenguin2008 2011-09-03   你好,请问这个封装后怎么用啊。
每个类还是要像下面这样声明吗?
private Logger log = Logger.getLogger(this.getClass()); 2 楼 mwhgJava 2011-09-09   bluepenguin2008 写道你好,请问这个封装后怎么用啊。
每个类还是要像下面这样声明吗?
private Logger log = Logger.getLogger(this.getClass());
和标准的Log4j的用法一样。

为了少生成Logger的实例,Logger定义为静态变量。

private static final Logger log = Logger.getLogger(xxx.class);
xxx为本类的类名。

热点排行