Log4j详细教程

Log4j安装:

     1.下载log4j的jar包,我下的版本为:1.2.16

snapshot-000

     2.在eclipse中新建一个普通文件夹(exjar),将jar复制到此目录中

snapshot-001

     3.设置此project的build path,将jar包添加到项目的classpath中。

snapshot-002
简单演示:

     可以通过两种方式配置log4j,一是直接在java源代码中直接使用,通常很少使用这种方式,他会降低代码的可读性,而且不可重复使用。二是通过配置文件进行配置。log4j支持两种类型的配置文件:键值对型的properties和xml类型。在web应用中多数是使用xml,这里就用xml类型来进行配置。

1.定义配置文件

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  
 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/' >
	<appender name="hello" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d [%t] %p - %m%n" />
		</layout>
	</appender>
 
	<root>
		<priority value="debug"></priority>
		<appender-ref ref="hello"></appender-ref>
	</root>
</log4j:configuration>
<root>:根loggor设置,日志记录有五种优先级别,这个设置的是debug界别
<appender>:控制日志的输出,其属性<class>中指定输出的类型,值必须为全名称的类型(含包名),本例是日志信息输出至控制台
<layout>:格式化输出日志的格式

2.建立java文件,并使用

package cn.hrmzone.logdemo;
 
import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;
 
public class HelloWorld {
 
	/**
	 * @param args
	 */
//	获取
	static Logger logger=Logger.getLogger(HelloWorld.class);
	public static void main(String[] args) {
		// TODO Auto-generated method stub
//		读取配置文件,读取的根目录是project目录,所以需要设置全路径名。
		DOMConfigurator.configure("bin\\cn\\hrmzone\\logdemo\\hello.xml");
		System.out.println("Log4J testing.....");
//		插入记录器
		logger.debug("debug test...");
		logger.info("info test...");
		logger.warn("warn test...");
		logger.error("error test...");
	}
 
}

     Logger.getLogger():获取记录器,其附则控制日志输出信息。
     DOMCofigurator.configure():读取配置文件。
     Logger.debug():在java中插入记录器。

3.运行后,会根据配置文件和java中插入的记录器,向appender中输出日志信息,如:

Log4J testing.....
2010-08-29 13:47:35,795 [main] DEBUG - debug test...
2010-08-29 13:47:35,795 [main] INFO - info test...
2010-08-29 13:47:35,795 [main] WARN - warn test...
2010-08-29 13:47:35,795 [main] ERROR - error test...

     一个简单的日志演示完成了,下面详细的介绍配置文件中各元素的信息。

配置文件:
     1.标签:根logger,可以设置日志记录的优先级别,他们分别为:

      static Level DEBUG
      DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。
 
	  static Level INFO
      INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。
 
      static Level WARN
      WARN level表明会出现潜在错误的情形。
 
      static Level ERROR
      ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。
 
      static Level FATAL
      FATAL level指出每个严重的错误事件将会导致应用程序的退出。
 
      static Level ALL
      ALL Level是最低等级的,用于打开所有日志记录。
 
      static Level OFF
      OFF Level是最高等级的,用于关闭所有日志记录。

     通常我们使用的是前五个优先级别,其优先级顺序为:ERROR、WARN、INFO、DEBUG,而且,日志记录器只输出高于设置的日志级别的log。就是说,如果设置为info级别,是不会输出debug级别的日志信息。
     2.标签:控制日志信息输出地,通常使用的appender有五种:

	1.org.apache.log4j.ConsoleAppender(控制台)
          2.org.apache.log4j.FileAppender(文件)
          3.org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
          4.org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
          5.org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
             1.ConsoleAppender选项
                    Threshold=WARN:指定日志消息的输出最低层次。
                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
                    Target=System.err:默认情况下是:System.out,指定输出控制台
              2.FileAppender 选项
                    Threshold=WARN:指定日志消息的输出最低层次。
                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
                    File=mylog.txt:指定消息输出到mylog.txt文件。
                    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
            3.DailyRollingFileAppender 选项
                    Threshold=WARN:指定日志消息的输出最低层次。
                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
                    File=mylog.txt:指定消息输出到mylog.txt文件。
                    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
                    DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
                    1)'.'yyyy-MM: 每月
                    2)'.'yyyy-ww: 每周 
                    3)'.'yyyy-MM-dd: 每天
                    4)'.'yyyy-MM-dd-a: 每天两次
                    5)'.'yyyy-MM-dd-HH: 每小时
                    6)'.'yyyy-MM-dd-HH-mm: 每分钟
            4.RollingFileAppender 选项
                    Threshold=WARN:指定日志消息的输出最低层次。
                    ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
                    File=mylog.txt:指定消息输出到mylog.txt文件。
                    Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
                    MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
                    MaxBackupIndex=2:指定可以产生的滚动文件的最大数。

     appender内选项的使用,需要用到

<param name="选项名" value="选项值">

控制appender的行为方式。
     3.标签:配置日志信息的布局,布局类型有:

1.org.apache.log4j.HTMLLayout(以HTML表格形式布局),
	选项
        	LocationInfo=true:默认值是false,输出java文件名称和行号
        	Title=my app file: 默认值是 Log4J Log Messages.
2.org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
	选项
		ConversionPattern=%m%n :指定怎样格式化指定的消息。
3.org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
	选项
       		 LocationInfo=true:默认值是false,输出java文件和行号
4.org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

     layout标签是嵌套在appender标签内的,期内各属性用法也是用标签

<param>

PatternLayout模式非常灵活,可以自定义各种格式,由ConversionPattern来指定。其内参数有:

%c  输出所属类的全名,可在修改为 %d{Num} ,Num类名输出的维(如:"org.apache.elathen.ClassName",%C{2}将输出elathen.ClassName%d	输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
%l  输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
%n  换行符
%m  输出代码指定信息,如info(“message"),输出message
%p  输出优先级,即 FATAL ,ERROR 等
%r  输出从启动到显示该log信息所耗费的毫秒数
 %t  输出产生该日志事件的线程名

更多实例:
1.自定义日志信息输出目的地和样式

<appender name="multiLayout" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="out.txt"></param>
		<param name="Append" value="true" />
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d [%l] [%t] [%p]:%m%n"></param> 
		</layout>
</appender>

     输出目的地为:DailyRollingFileAppender(周期性产生日志文件),文件名为out.txt(此文件是产生在project根目录下的。DatePattern(按照天产生日志文件)。使用PatternLayout日志布局(样式)。运行后产生的文件中的信息为:

2010-08-29 14:48:40,705 [cn.hrmzone.logdemo.HelloWorld.main(HelloWorld.java:19)] [main] [DEBUG]:debug test...
2010-08-29 14:48:40,707 [cn.hrmzone.logdemo.HelloWorld.main(HelloWorld.java:20)] [main] [INFO]:info test...
2010-08-29 14:48:40,707 [cn.hrmzone.logdemo.HelloWorld.main(HelloWorld.java:21)] [main] [WARN]:warn test...
2010-08-29 14:48:40,708 [cn.hrmzone.logdemo.HelloWorld.main(HelloWorld.java:22)] [main] [ERROR]:error test...

     如果需要自定义输出日志文件所在的目录,可以定义为:

<param name="File" value="bin/cn/hrmzone/logdemo/out.txt"></param>

注意事项:
     1.注意路径中的”/“斜线,不同于windows中的路径中的”\“斜线。
     2.为了便于理解log4j的配置文件中appender、layout、root的关系,这里有张log4j的继承类图:
11136_644612_1

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">

Go back to top