内容转自多篇文章:
http://afront.bokee.com/6157060.html
http://blog.csdn.net/lcazxc/archive/2007/06/01/1634743.aspx
一般情况下 Log4j 总是和 Apache Commons-logging 一起用的。
一、Log4j的简单思想
Log4j真的很简单,简单到令人发指的地步。不是要记录日志吗?那就给你一个Log,然后你用Log来写东西就行了,先来一个完整类示例:
举个例子
package test;
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();
}
}
ps:要想运行这个程序,需要先部署,详见第三点,在下面
别怕,看完这篇文章你就会觉得很简单了。
Log4j 默认把日志信息分为五个等级(日志可以分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL七个等级)
debug < info < warn < error < fatal
虽然可以自己添加等级,但是我觉得没有必要,五个够用了吧!你要写入信息的时候就把信息归为五个等级中的一个,然后调用相应的函数即可。
分五个等级到底有什么用呢?日志信息到底写到哪里去了?
“ LogFactory.getLog (Test. class ) ”又是什么意思捏?接着往下看吧!
Log4j 的关键之处在于它的继承思想。也就是一个 Log 可以继承另外一个 Log 的属性(输出到哪里,日志等级,日志格式等等)。怎么继承?
Log4j 是根据 Log 的名字来判断继承关系的,比如:
名字为“ com.zhlmmc.lib ”的 Log 就是“ com.zhlmmc.lib.log ”的 parent ,明白了吧! Log4j 还有一个 rootLogger ,相当于 Java 的 Object 。
回过头来看“ LogFactory.getLog (Test. class ) ”这里的“ Test. class ”事实上传进去的是 Test 这个类的完整路径(包名 + 类名),“ test.Test ”。这样如果存在“ test ”这个 Log 那么 Test 这个 Log 就继承它,否则就继承 rootLogger 。
那具体的 Log 属性是在哪里定义的呢?
二、常见的配置文件
虽然可以用 xml 或者在运行时用 Java 来配置 Log4j ,但还是 properties 文件好用啊!
log4j.rootLogger= info, stdout
log4j.appender.stdout= org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout= org.apache.log4j.PatternLayout
# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern= %5p [%t] (%F : %L) - %m%n
分析一下:
第一行,配置 log4j.rootLogger 你明白吧。应为它是根,总得配置一下,否则别的 Log 继承什么啊。其他的 Log 可以配置也可以不配置。等号后面的第一个参数表示日志级别,可以填五个级别中的一种,后面的参数都是让 Log 知道输出到哪里,如果你想让日志输出到两个地方就加两个输出参数,比如:
log4j.rootLogger= info, stdout, file
这里的 info 表示,该 Log 的日志级别为 info ,所有级别小于 info 的日志都不会被记录。比如使用这个配置文件的话,我刚开始举的那个类中
log .debug( "Debug info." );
这句话是不起作用的,因为 debug 的级别小于 info 。这样就很容易控制什么信息在调试的时候要显示,什么信息在发布的时候要去掉。这些都不用改代码,很方便吧。
但, stdout 和 file 又是什么呢?
接着往下看,就是配置 stdout 了,这个名字是随便取的,你可以叫它 A :
log4j.appender.A= org.apache.log4j.ConsoleAppender
那么上面的 rootLogger 的参数 stdout 也要改成 A ,其他用到的地方当然也要改。这里的关键不是名字,而是 appender 类型,比如这里的“ ConsoleAppender ”,看明白了吧,输出到 Console 。后面两行都是设置日志格式的,一般情况下你就照抄吧。既然是最简入门关注于理解 Log4j 的工作原理,我就不介绍 file 类型的 appender 了,一搜一大把。
在实际的项目开发中,很可能遇到所引用的包用 Log4j 来记录日志,比如 Hibernate 。那么在这里你可以很容易的控制这个包如何记录日志。比如在上面的配置文件中加一行:
log4j.logger.org.hibernate= fatal
那么所有 org.hibernate 包下面的类就只会显示很少的信息,因为 fatal 的级别最高啊。
下面写一个配置实例:
第一步、下载log4j-1.2.14.jar文件包,放入lib目录下。
第二步、写配置文件log4j.properties
#指定根Logger,及日志输出级别,大于等于该级别的日志将被输出( DEBUG < INFO < WARN < ERROR < FATAL ) 设为OFF可以关闭日志
log4j.rootLogger=DEBUG, A1,A2
#指定log输出目的,这里设为输出日志到指定目录的文件my.log中
log4j.appender.A1=org.apache.log4j.FileAppender
log4j.appender.A1.File=d:\\my.log
#指定日志信息的格式
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} %c %p -%m%n
#把A2输出到控制台
log4j.appender.A2=org.apache.log4j.ConsoleAppender
log4j.appender.A2.layout=org.apache.log4j.SimpleLayout
#还可以单独指定输出某个包的日志级别
#log4j.logger.com.study.HelloLog4j=INFO
第三步、编写log4j类:
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator ;
public class Log4j {
static public Logger logger=Logger.getLogger(Log4j.class.getClass());
public Log4j()
{
//使用配置文件来配置Log4j
PropertyConfigurator.configure ( "D:\\workspace\\addressbook1\\WebRoot\\WEB-INF\\log4j.properties" ) ;
//插入日志信息
logger.info("HelloLog4j开始执行");
}
public Logger getlog(){return Log4j.logger;}
}
第四部、在程序中调用
Log4j log=new Log4j();
log.getlog().info("this is in action");
三、部署
别怕,这可不是部署 Tomcat 。把 log4j 的包和 commons-logging 的包(加在一起才两个)放到 classpath 下面。然后把配置文件保存为 log4j.properties ,也放在 classpath 下面(如果用 Eclipse 的话,放在 src 目录下即可)。然后你就可以跑了。
分享到:
相关推荐
【Log4j入门学习笔记】 Log4j是一个广泛使用的Java日志框架,旨在解决程序开发中日志记录的复杂性和可维护性问题。它提供了一种灵活的方式来控制日志信息的输出格式、输出级别和输出位置,使得在调试、监控和故障...
Log4j学习涵盖的内容广泛,从基础的配置和使用,到高级的源码分析和性能优化。通过学习Log4j,开发者能够更好地监控和调试程序,提升问题定位效率,同时也能理解日志管理在软件开发中的重要性。文件“log4jTest”...
### Log4j入门详解 #### 1. Log4j简介 Log4j是Apache软件基金会下的一个开源项目,它提供了一种强大且灵活的方式来管理和控制应用程序的日志记录。相较于简单的打印语句,Log4j提供了更为高级的功能,比如能够根据...
### Log4J 最简入门详解 #### 一、Log4J简介与基本概念 Log4J是一款非常流行的Java日志框架,由Apache...通过学习这些基础内容,开发者可以轻松地在自己的项目中集成Log4J,从而更好地管理和调试应用程序的日志信息。
标题"Log4j简单使用"表明我们即将探讨的是日志记录库Log4j的基础应用。Log4j是Apache软件基金会开发的一个开源项目,它为Java应用程序提供了一个灵活的日志系统,允许开发者自定义日志级别、输出格式以及存储位置等...
通常,一本完整的手册会包括以下几个部分:介绍Log4j的基础知识、详细说明如何配置和使用Log4j、示例和最佳实践、高级配置技巧、性能优化建议、以及Log4j的二次开发等方面内容。读者可以根据个人需要,找到对应章节...
**Java学习Log4j详细文档和入门工程** 在Java编程中,日志记录是一个至关重要的环节,它能够帮助开发者跟踪程序运行状态,定位错误和异常,优化性能。Log4j是Apache组织提供的一款广泛使用的开源日志框架,适用于...
### log4j从入门到详解 #### 1. Log4j简介 Log4j是一款由Apache组织提供的开源日志组件,被广泛应用于Java应用程序中。它可以帮助开发者在应用程序中记录日志信息,这对于调试程序、追踪错误以及进行系统监控等...
"log4j入门程序,免费下载。需要log4j-1.2.15.jar" 描述了这个程序是初学者学习Log4j的入门示例,用户可以免费下载。"log4j-1.2.15.jar" 是Log4j的一个特定版本,表明该程序依赖于这个版本的库文件来运行。这个版本...
在标题“log4j实例,log4j-1.2.9.jar”中,我们看到的是Log4j的一个具体版本——1.2.9。这个版本虽然相对较旧,但它仍然是许多现有项目的基础,因为它稳定且功能齐全。 **1. Log4j的核心组件** Log4j由三个主要...
### log4j学习入门知识点详解 #### 一、Log4j简介 Log4j是一款开源的日志框架,由Apache组织提供。它可以帮助开发者轻松地在应用程序中添加日志功能,从而便于追踪应用程序的状态和行为。Log4j的主要优势在于其...
**Log4j学习笔记** Log4j是一款广泛应用于Java编程中的日志记录框架,由Apache软件基金会开发。它提供了一套灵活的日志记录系统,帮助开发者在开发过程中追踪应用程序的行为,便于调试、性能分析和问题排查。Log4j...
总之,这三个文档将全面覆盖Log4j的基础知识、高级特性和API使用,对于任何想要深入学习和使用Log4j的Java开发者来说,都是宝贵的参考资料。通过学习和实践,你可以更加自如地驾驭日志这一强大的工具,提升你的开发...
**标题与描述解析** ...总的来说,这个Eclipse工程提供了一个快速上手log4j的平台,通过学习和实践其中的代码,开发者可以更好地理解和掌握log4j的配置与使用,提升日志管理效率,从而优化开发过程。
除了上述基础配置外,log4j还支持更多高级功能,例如滚动文件输出、邮件通知等。这些特性可以通过增加额外的Appender实现。 #### 六、总结 通过本文档的学习,我们了解了log4j配置文件的基本结构和关键配置项的...
**Log4j基础知识:** 1. **日志级别**:Log4j支持多个日志级别,如DEBUG、INFO、WARN、ERROR、FATAL以及OFF,允许开发者根据需要调整日志输出的详细程度。 2. **配置文件**:Log4j使用配置文件(如log4j2.xml或log4j...
### log4j中文手册知识点概览 ...综上所述,`log4j`是一款强大且灵活的日志记录工具,通过上述知识点的学习,我们不仅可以快速掌握其基础使用方法,还能深入理解其内部机制,更好地应用于实际项目中。
通过这个入门程序,我们可以学习到如何配置 Log4j,创建 logger,设置输出级别,以及如何记录不同级别的日志信息。在实际项目中,Log4j 可以帮助我们更好地追踪程序运行状态,定位错误,提高开发效率。随着对 Log4j ...
**正文** 日志系统在软件开发中扮演着至关重要的角色,它可以帮助开发者追踪程序...在"log4j日志打印demo"中,你将学习到如何设置Log4j以实现控制台和SD卡(针对Android)的日志输出,从而在实际开发中更加得心应手。