A.日志的作用:
1.记录程序运行时的出错信息,便于软件开发人员分析错误的原因,修正bug;
2.充当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息;
3.监视程序运行的状况,周期性地记录到文件或数据库中,以便日后进行统计分析;
B.log4j的主要组件:
1.Logger;---日志记录器
2.Appender;---控制日志在什么地方输出
3.Layout;---控制日志以什么样的格式输出
B.1.Logger组件:
1.记录器分为根记录器和自记录器,根记录器为与记录器层次中的顶部,它永远存
在,且不能通过名字检索或引用,可以通过调用org.apache.log4j.Logger类的静态
方法getRootLogger()获取,而其他的子记录器则通过org.apache.log4j.Logger类的
静态方法getLogger(String name)来实例化。
2.记录器有一个重要的属性---日志级别
a.日志级别分为5个级别,他们由小到大一次为:DEBUG<INFO<WARN<ERROR<FATAL,
他们在org.apache.log4j.Level类中定义,是枚举类型。
b.不同的日志具有不同的级别。
c.1. 如果logger的级别为DEBUG,则logger会记录DEBUG级别和DEBUG级别以上的日志信息
c.2. 如果logger的级别为INFO,则logger会记录INFO级别和INFO级别以上的日志信息,不会
记录INFO级别以下的日志信息
c.3. 依次类推.....
3.Logger记录器的常用方法如下:
a.public static Logger getRootLogger();
b.public static Logger getLogger(String name);
c.public void debug(Ojbect message);
d.public void info(Ojbect message);
e.public void warn(Ojbect message);
e.public void error(Ojbect message);
f.public void fatal(Ojbect message);
B.2.Appender组件:
1.日志输出目的地如下:
a.输出到控制台;
b.文件;
c.GUI组建;
d.远程嵌套接字服务器;
e.JMS;
f.NT事件记录器;
g.UNIX Syslog守护进程;
注意:1.我们常用的两种为:输出到控制台和文件,同时日志信息可以被异步地输出;
2.一个记录器可以有多个Appender,通过调用Logger的addAppender()方法来
增加Appender;
2.与上对应的Appender如下:
//输出到控制台;
a.org.apache.log4j.ConsoleAppender;
//输出目的地为文件
b.org.apache.log4j.FileAppender;
//按照用户指定的时间或日期频率滚动产生日志文件
c.org.apache.log4j.DailyRollingAppender;
//当文件达到一定的尺寸是,备份日志文件;
d.org.apache.log4j.RollingFileAppender;
注意:每个记录器都有一个继承标记,用于决定记录器是否可以继承其父记录器的
Appender,这个标记可以通过调用Logger类的setAdditivity(boolean additive)方
法来设置,默认情况下,这个标记被设置为true。需要注意的是,对于Appender的
继承,是一种叠加性继承,而且后代记录器之继承其父记录器的Appender,而不考
虑更远的祖先的情况
B.3.Layout组件:
1.一个Appender只能有一个Layout,主要有以下几种Layout:
//SimpleLayout的输出由日志的级别+"-"+日志消息组成。例如DEBUG-Hello world.
a. org.apache.log4j.SimpleLayout;
//以HTML表格的方式输出日志信息
b. org.apache.log4j.HTMLLayout;
//XMLLayout的输出有一系列在log4j.dtd中定义的<log4j:event>元素组成的.
c. org.apache.log4j.XMLLayout;
// TTCCLayout的输出由时间(time)、线程(thread)、类别(category)和
嵌套的诊断上下文(context)信息组成,TTCCLayou的命名有这四个单词的
首字母组成的.
d. org.apache.log4j.TTCCLayout;
//PatternLayout提供了和C语言的printf()方法一样的灵活性,程序员可以按照
一定的转换模式指定日志的信息输出格式。
e. org.apache.log4j.PatternLayout;
2.常用转换符和其作用
转换字符 作用
%c 用于输出日志事件的类别(category)
%d 用户输出日志事件的日期如:%d{HH:mm:ss,SSS}
%p 用于输出日志事件的级别
%t 用于输出日志事件的线程名字
%% 序列"%%",将输出一个单独的%
%m 日志消息
%M 日志输出的方法
%n 用于换行
[%-5p]或%p 用于输出日志事件的级别
.......
C.log4j的应用:
1.读取配置文件的方式:
a.BasicConfiguration.configure()//根记录器
b.PropertyConfigurator.configure(String configFileName)//key="值" (java中常用)
c.DOMConfigurator.configure(String filename)
2.配置Logger组件:
a.配置根记录器
log4j.rootLogger=[level][appenderName1][appenderName2]....
其中level指定日志级别,可以为(OFF,DEBUG,INFO,WARN,ERROR,FATAL,ALL)
可以指定多个Appender
b.配置其他记录器
log4j.logger.loggerName=[level][appenderName1][appenderName2]....
3.配置Appender组件:
a. log4j.appender.appenderName=完整的类名
b. log4j.appender.appenderName.option1=value1;
...
c. log4j.appender.appenderName.optionN=valueN;
4.配置Layout组件:
a. log4j.appender.appenderName.layout=完整的类名
b. log4j.appender.appenderName.layout.option1=value1
...
c. log4j.appender.appendername.layout.optionN=valueN
D.log4j配置文件的示例:
1.log4j_1.properties
#根记录器的日志级别是ERROR,在这个级别以下的日志信息见被忽略。
#为根记录器指定名字为console的Appender
log4j.rootLogger=ERROR,console
#定义bookstoreLogger记录器,没有设置日志级别,将继承根记录器的级别。
#为bookstoreLogger记录器指定名字为file的Appender,bookstoreLogger
记录器还将继承根记录的Appender.
log4j.logger.bookstoreLogger=,file
#定义一个名字为console的Appender,它的类型是ConsoleAppender。
log4j.appender.console=org.apache.log4j.ConsoleAppender
#console Appender 使用的Layout是SimpleLayout。
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
#定义一个名字为file的Appender,它的类型是FileAppender。
log4j.appender.file=org.apache.log4j.FileAppender
#指定file Appender输出的日志文件的名字和存放路径.
log4j.appender.file.File=F:JSPLession/ch19/WEB-INF/ch19.log
#file Appender 使用的Layout是PatternLayout.
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#指定日志信息的输出格式
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
[%c]-[%-5p]%m%n%n
2.log4j_2.properties
log4j.rootLogger=EEROR,console
log4j.logger.bookstoreLogger=,file
log4j.additivity.bookstoreLogger=false
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.SimpleLayout
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=F:JSPLession/ch19/WEB-INF/ch19.log
#定义一个名字为file的Appender,它的类型是RollingFileAppender。
log4j.appender.file=org.apache.log4j.RollingFileAppender
#设置最大文件尺寸为1MB,当日志文件大小达到1MB是,开始备份到备份文件中。
log4j.appender.file.MaxFileSize=1MB
#设置备份文件的最大数目为2个文件.
log4j.appender.file.MaxBackupIndex=2
#指定file Appender输出的日志文件的名字和存放路径.
log4j.appender.file.File=F:JSPLession/ch19/WEB-INF/ch19roll.log
#file Appender 使用的Layout是PatternLayout.
log4j.appender.file.layout=org.apache.log4j.PatternLayout
#指定日志信息的输出格式
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}
[%c]-[%-5p]%m%n%n
E.结论性的东西:
1.
logger.setLevel(Level.ALL);//输出5条日志信息
logger.setLevel(Level.DEBUG);//输出5条日志信息
logger.setLevel(Level.INFO);//输出4条日志信息
logger.setLevel(Level.WARN);//输出3条日志信息
logger.setLevel(Level.ERROR);//输出2条日志信息
logger.setLevel(Level.FATAL);//输出1条日志信息
logger.setLevel(Level.OFF);//输出0条日志信息