Log4j的简单思想
Log4j真的很简单,简单到令人发指的地步。不是要记录日志吗?那就给你一个Log,然后用Log来写东西就行了,先来一个完整类示例:
package test.robin;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Test {
static Log log = LogFactory.getLog(Test.class);
public void log(){
log.debug("Debug info.");
log.info("Info info");
log.warn("Warn info");
log.error("Error info");
log.fatal("Fatal info");
}
public static void main(String[] args) {
Test test = new Test();
test.log();
}
}
我们从这个例子说起,先不要着急,很快就豁然开朗了。
Log4j默认把日志信息分为五个等级:
all<debug < info < warn < error < fatal<off
虽然可以自己添加等级,但是我觉得没有必要,五个够用了吧!你要写入信息的时候就把信息归为五个等级中的一个,然后调用相应的函数即可。分五个等级到底有什么用呢?日志信息到底写到哪里去了?“LogFactory.getLog(Test.class)”又是什么意思捏?接着往下看吧!(现在用这个Logger.getLogger(Test.class)或者Logger.getLogger(InitDicDao.class.getName()) )
继承思想:
Log4j的关键之处在于它的继承思想。也就是一个Log可以继承另外一个Log的属性(输出到哪里,日志等级,日志格式等等)。怎么继承?
Log4j是根据Log的名字来判断继承关系的,比如:
名字为“com.robin.lib”的Log就是“com.robin.lib.log”的parent,明白了吧!Log4j还有一个rootLogger,相当于Java的Object。Log4J中总是存在一个rootLogger,即使没有显示配置也是存在的,并且默认输出级别为DEBUG。其它的logger都继承自这个rootLogger(如果其他logger未单独定义其输出级别)了解Log4j的继承思想对学习Log4j很重要。
回过头来看“Logger.getLogger(Test.class)”这里的“Test.class”事实上传进去的是Test这个类的完整路径(包名+类名),“test.robin.Test”。这样如果存在“test”或者“text.robin”这样的Log那么Test这个Log就继承它,否则就继承rootLogger。
那具体的Log属性是在哪里定义的呢?
我们可以认为Logger.getLogger(Test.class)就是静态方法获取一个loger实例,这个实例的相关信息就是我们在配置文件里配置好的logger。(xml文件的logger标签)
每次我们在系统中取得logger时,并不是新建实例,这些实例是系统启动的时候就按照配置文件初始化好的(也可能时第一次引用的时候建立的,然后缓存其实例供以后使用,这部分还没有时间研究)。
关于logger的两点说明:
· 用同名参数调用Logger.getLogger(String name)将返回同一个logger的引用。故可以在一个地方配置logger,在另外一个地方获得配置好的logger,而无须相互间传递logger的引用。
· logger的创建可以按照任意的顺序,即,父logger可以后于子logger被创建。log4j将自动维护logger的继承树。
部署:
把log4j的包和commons-logging的包(加在一起才两个)放到classpath下面。然后把配置文件保存为log4j.properties,也放在classpath下面(如果用Eclipse的话,放在src目录下即可)。然后你就可以跑了。
默认的log4j初始化过程:
Logger类的静态初始化块(static initialization block)中对log4j的环境做默认的初始化。注意:如果程序员已经通过设置系统属性的方法来配置了log4j环境,则不需要再显式地调用XXXConfigurator.configure()方法来配置log4j环境了。
Logger的静态初始化块在完成初始化过程时将检查一系列log4j定义的系统属性。它所做的事情如下:
- 检查系统属性log4j.defaultInitOverride,如果该属性被设置为false,则执行初始化;否则(只要不是false,无论是什么值,甚至没有值,都是否则),跳过初始化。
- 把系统属性log4j.configuration的值赋给变量resource。如果该系统变量没有被定义,则把resource赋值为"log4j.properties"。注意:在apache的log4j文档中建议使用定义log4j.configuration系统属性的方法来设置默认的初始化文件是一个好方法。
- 试图把resource变量转化成为一个URL对象url。如果一般的转化方法行不通,就调用org.apache.log4j.helpers.Loader.getResource(resource, Logger.class)方法来完成转化。
- 如果url以".xml"结尾,则调用方法DOMConfigurator.configure(url)来完成初始化;否则,则调用方法PropertyConfigurator.configure(url)来完成初始化。如果url指定的资源不能被获得,则跳出初始化过程。
整理自: http://www.cnblogs.com/Fskjb/archive/2011/01/29/1947592.html
http://xiaotot.blog.163.com/blog/static/1054650672009428111323294/
http://zhangjunhd.blog.51cto.com/113473/21014
分享到:
相关推荐
**标题:** Log4j教程 **内容概述:** Log4j是Apache软件基金会的一个开源项目,它是一个广泛使用的Java日志框架,为应用程序提供灵活的日志记录功能。它旨在成为一种简单但强大的工具,用于控制日志输出的位置、级别...
#### 二、Log4j基本配置文件详解 Log4j的基本配置文件通常为`log4j.properties`或`log4j.xml`。配置文件主要由三部分组成:Appender(日志输出源)、Logger(日志记录器)以及Root Logger(根日志记录器)。 #####...
### Log4j入门指南知识点详解 #### 一、引言 在软件开发过程中,日志(Log)记录是一项不可或缺的功能。良好的日志管理不仅能帮助开发者快速定位问题所在,还能为后期的系统维护提供便利。本篇内容主要围绕Log4j进行...
本教程将深入介绍如何使用Log4j进行日志记录,包括配置、基本用法和组件。 一、入门实例 1. 首先,你需要创建一个新的Java工程,并导入Log4j的库文件,例如`log4j-1.2.17.jar`。确保这个库文件在项目的类路径中,...
### log4j入门与精通教程 #### 一、引言 在软件开发过程中,日志记录是一项非常重要的功能。它不仅能够帮助开发者更好地理解和追踪应用程序的行为,还能够在系统出现故障时提供关键信息以便进行问题诊断。传统的...
Log4j是一个广泛应用于Java开发中的开源日志记录框架,由Apache软件基金会维护。它的主要优点在于提供了一种灵活、可配置的方式来控制日志信息的输出,替代了传统的`System.out.println()`等打印语句。Log4j允许开发...
《log4j从入门到详解》是一份深入探讨日志框架log4j的教程资料,主要面向对Java日志管理有需求的开发者。log4j是Apache组织开发的一个开源项目,它提供了一种灵活的日志记录方案,广泛应用于Java应用程序中,以帮助...
### 日志框架log4j和slf4j入门教程知识点详解 #### 一、Log4j简介 **Log4j** 是Apache组织下的一个开源项目,主要用于Java应用程序的日志记录功能。通过Log4j,开发者可以灵活地控制日志信息的输出格式、输出目的...
**日志框架Log4j详解** 日志框架在软件开发中扮演着至关重要的角色,它提供了记录应用程序运行过程中的各种信息、...在"Log4j入门、详解.pdf"这份文档中,你将找到更详细的步骤和示例,帮助你深入理解和应用Log4j。
**Java学习Log4j详细文档和入门工程** 在Java编程中,日志记录是一个至关重要的环节,它能够帮助开发者跟踪程序运行状态,定位错误和异常,优化性能。Log4j是Apache组织提供的一款广泛使用的开源日志框架,适用于...
【标题】"mybatis查询入门(log4j控制台sql语句日记输出的)"涉及的知识点主要集中在MyBatis框架的基础使用以及如何通过Log4j在控制台输出SQL语句,以便于调试和优化数据库操作。MyBatis是一个轻量级的Java持久层框架...
- "log4j从入门到详解.pdf":这是一份完整的Log4j教程,从基础概念到高级用法,覆盖了Log4j的各个方面,适合初学者和进阶学习者。 - "log4j.rar": 这可能是Log4j的源码或者其他相关资源的压缩包,解压后可能包含更多...
Log4j 新手快速入门教程 Log4j 是 Apache 的一个开源项目,通过在项目中使用 Log4J,我们可以控制日志信息输出到控制台、文件、GUI 组件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出...
《log4j从入门到详解》是一份详细探讨Java日志框架log4j的资源包。log4j是Apache组织开发的一个开源日志记录工具,它为Java应用程序提供了灵活且强大的日志处理功能。这份教程将带你逐步了解并掌握log4j的核心概念、...
《Java日志记录:Log4j入门教程》 在Java编程中,日志记录是一项至关重要的任务,它有助于开发者在程序运行过程中跟踪错误、调试代码以及监控系统性能。Log4j是Apache软件基金会开发的一个开源日志框架,因其强大的...
提供的资源中包含`log4j从入门到详解.pdf`,这是一个详细的Log4j教程,涵盖了从基础概念到高级特性的全面讲解。此外,`log4j配置.doc`可能是具体的配置示例或注意事项,而`log4j-1.2.13.jar`则是Log4j的库文件,用于...
"Log4j-在控制台打印SQL的源码" 指的是一个教程或案例,目的是教用户如何配置并使用Log4j日志框架来记录应用程序中的SQL语句,使得这些SQL语句可以在控制台中打印出来。这通常用于调试和性能分析,特别是对于使用...
Log4j 的使用教程主要分为三个部分:入门实例、基本使用方法、Log4j 的配置。 一、入门实例 在使用 Log4j 之前,需要新建一个 Java 工程,导入 Log4j 的 jar 包。然后,创建一个 log4j.properties 文件,用于配置 ...