`

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

}

分享到:
评论
3 楼 penuel 2014-07-25  
保护日志发生现场LocationInfo(日志发生时的类、方法、类文件及行数)。
这一点还是没做到呀,按照你写的,日志还是出现定位在了封装的这个Logger里;
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为本类的类名。
1 楼 bluepenguin2008 2011-09-03  
你好,请问这个封装后怎么用啊。
每个类还是要像下面这样声明吗?
private Logger log = Logger.getLogger(this.getClass());

相关推荐

    Log4j的学习笔记

    **Log4j学习笔记** Log4j是一款广泛应用于Java编程中的日志记录工具,由Apache软件基金会开发。它提供了一种灵活且强大的机制来记录应用的运行情况,这对于调试、性能分析、问题追踪以及系统监控至关重要。这篇学习...

    Log4J学习笔记

    ### Log4J学习笔记 #### 一、Log4J配置文件的学习 在深入理解Log4J之前,我们先从配置文件入手。Log4J支持多种配置文件格式,其中包括XML和Java特性文件(键=值)。这里我们将重点介绍如何使用Java特性文件作为...

    使用koa-log4管理nodeJs日志笔记的使用方法

    `koa-log4`是基于`log4js-node`的一个封装,专门为Koa框架设计,提供方便的日志分割和输出功能。 首先,让我们了解下项目的目录结构。在后端代码中,有一个`logs`目录用于存储所有日志文件,包括`db.js`用于数据库...

    笔记30-JAVAEE之SpringBoot的日志

    本笔记将探讨Spring Boot中的日志管理,特别是如何使用Slf4j进行日志记录,并简要介绍门面模式在系统架构中的应用。 1. **Spring Boot 日志框架:** Spring Boot默认集成了多种日志框架,如Logback、Log4j2等,但...

    上传USB+FPC连接器封装.zip

    本压缩包文件"USB+FPC连接器封装.zip"包含了多种类型的USB和FPC(柔性扁平电缆)连接器的封装,这对于电子工程师进行硬件设计时非常有帮助。下面将详细介绍其中涉及的知识点。 首先,AD(Altium Designer)是业界...

    源码笔记.rar

    Java的Exception类和logging框架如Log4j或SLF4J可以帮助开发者追踪和解决运行时问题。 【单元测试与集成测试】 良好的源码应该包含全面的测试用例,以确保代码质量。JUnit是Java中常用的单元测试框架,而Mockito则...

    一键封装工具标准版5.0.0707

    4. 封装出错,但提示成功 由于出错时您没有按ESC退出,Newprep忽略了错误继续运行, 并对系统电源进行了更改,这样,如果再次封装可能会死机。 如出现错误,请按ESC退出,您还可以重来,否则就得重新做系统了。 5...

    B站java狂神说笔记

    Apache是常见的开源软件项目,其产品如Tomcat(Java EE应用服务器)、HttpClient(网络通信库)、Log4j(日志框架)等在Java开发中广泛应用。笔记可能会介绍如何集成和使用这些工具。 总结,【Java狂神说笔记】是一...

    java私塾学习笔记整理

    #### 第九章:集合框架 Java集合框架提供了实现特定数据结构的接口和类。 **Set接口**:不允许重复元素。 **List接口**:有序且允许重复元素。 **Map接口**:存储键值对映射关系。 **Set接口** - **HashSet**:...

    pmon学习笔记

    4. pmon代码执行流程:start.S是pmon执行的第一段代码,它的核心功能是将pmon的二进制文件复制到内存中。接着它初始化cache、内存控制器、内存和南桥的一些信号线。在内存控制器初始化后,pmon的代码被载入内存中...

    hibernate框架学习笔记整理

    - 导入log4j日志包。 2. **创建数据库和表**: - 数据库:`crm` - 表:`cst_customer` 3. **创建Java实体类**。 4. **编写映射文件**(ORM元数据): - 映射文件与实体类放在同一包下,文件名为实体类名加`....

    ibatis学习笔记

    log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ``` **6. 属性文件SqlMap.properties** 示例: ```...

    javascript 高级程序设计 读书笔记(3)

    这篇读书笔记主要聚焦在第三部分,这部分通常涵盖了更高级的主题,如对象、原型、闭包以及模块化等。结合提供的"listutil.js"文件,我们可以深入探讨JavaScript中的实用工具函数和编程技巧。 首先,JavaScript的...

Global site tag (gtag.js) - Google Analytics