[转] Log4j 1.2.15 使用指南
2010-01-29 22:06
453 查看
因为公司的'Visibility'项目确定改成用java来写(原来是C#),所以日志工具也得从log4net转到log4j,在这里我东拼西凑出一些网上找出来的文章,以方便快速上手log4j。
Log4j发展的真快,2005年用的时候版本是1.2.8。现在再看时发现都出到2.0了,仔细一看,还有点意思,log4j上作了个说明。log4j有3个分支,1.2是稳定版,1.3不再继续,2.0是实验版。
看来还是用1.2版的比较好,现在的版本是1.2.15,和1.2.8比有很大的变化。从配置文件里反映出来,大的结构都变了。现把要点摘录如下:
Log4j有3个主要部件,loggers, appenders and layouts.
logger有如下几个级别,排列如下:DEBUG < INFO < WARN < ERROR < FATAL。logger引入了继承的概念,这里指的是名称继承,logger com.foo是 com.foo.Bar的父logger。同样java.util是java.util.Vector的父类。另外Logger x = Logger.getLogger("wombat"); 和 Logger y = Logger.getLogger("wombat"); 是指向同一个对象,这样的话不需要到处传递对象的引用。
appender的意思是“输出的目的地”, 它可以是console,file,gui component,JMS,remote socket server,NT Event Log。任何写log的请求会被传递到这个logger所有的appender那里,同样也会传递到继承关系的上一级的logger的appender那里。appender会随着logger继承关系而附加继承。如果想停止这种附加继承,可以把additivity的标记设为false。
layout顾名思义是管输出的格式的,PatternLayout是Log4j的标准输出格式,具体内容请参照javadoc。简单归纳一下PatternLayout,一般的格式是%+格式修饰符+转换字符。转换字符就是要显示哪些内容,可以参照javadoc查到,格式修饰符的规律如下:
贴个例子:
配置文件:log4j.properties (如果用eclipse,要放在src目录下)
log4j.rootLogger=debug, A1, A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss,SSS}] (%F:%L) - %m%n
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=example.log
log4j.appender.A2.MaxFileSize= 100KB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%5p %t %c - %m%n
.java文件:Log4jTest.java
package com.suyang;
import org.apache.log4j.*;
public class Log4jTest {
private static Logger logger = Logger.getLogger(Log4jTest.class.getName());
public static void main(String[] args) {
logger.info("我在测试");
int x = 0;
try {
x = 5 / x;
}
catch(Exception e) {
logger.info(e);
logger.debug(e);
}
}
}
现在来说说上面配置文件的参数(把上面的配置文件分为三大块)
第一块:log4j.rootLogger=debug,A1,A2
a)log4j.rootLogger后面的第一个参数debug(这个值(显示的信息优先级)的取值范围为6种:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF)
b)上面例子中设置了DEBUG,则我程序中写的log.debug(),log.info(),log.warn()...级别>=DEBUG都会显示出来;
c)如果你设置了INFO,那么我程序中写的log.debug()是不会被显示出来的,log.info(),log.warn()...这些内容才会显示出来;
d)A1,A2两个为appender的名称(即,你可以每一个名称都对应一块内容),这两个参数结合第二,三大块内容来看;
第二块:这一块是用来定义A1的appender的几个参数
a)log4j.appender.A1=org.apache.log4j.ConsoleAppender(指明A1的显示方法,有下面几种取值)
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
b)log4j.appender.A1.layout=org.apache.log4j.PatternLayout(指明A1的显示信息的类型)
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
c)log4j.appender.A1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n(指明A1的显示信息的格式)
%p 输出优先级,即ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n";
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如(yyyy-MM-dd HH:mm:ss,SSS);
%L 输出代码中的行数;
%l 输出代码中的所属文件中的方法下面的行数;
%F 输出代码中的文件名;
%m 输出代码中的行数;
切记,上面的参数是区分大小写的;
第三块:现在应该看得懂第三块的内容了吧!
另外,将日志写入DB的配置文件如下:
log4j.rootLogger=WARN,DATABASE
#直接使用log4j包中的文件
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#与数据库建立连接
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=icy
#指定要插入数据库的格式
log4j.appender.DATABASE.sql=INSERT INTO log4j (log_date, log_level, location, message) VALUES ('%d{ISO8601}', '%p', '%C,%L', '%m')
最后转几条小技巧:
1.NDC和MDC
2.动态修改日志配置文件
具体参看原文:[转自]http://rongsantang.ycool.com/post.1002996.html
[部分转自]http://www.javaeye.com/topic/185239
Log4j发展的真快,2005年用的时候版本是1.2.8。现在再看时发现都出到2.0了,仔细一看,还有点意思,log4j上作了个说明。log4j有3个分支,1.2是稳定版,1.3不再继续,2.0是实验版。
看来还是用1.2版的比较好,现在的版本是1.2.15,和1.2.8比有很大的变化。从配置文件里反映出来,大的结构都变了。现把要点摘录如下:
Log4j有3个主要部件,loggers, appenders and layouts.
logger有如下几个级别,排列如下:DEBUG < INFO < WARN < ERROR < FATAL。logger引入了继承的概念,这里指的是名称继承,logger com.foo是 com.foo.Bar的父logger。同样java.util是java.util.Vector的父类。另外Logger x = Logger.getLogger("wombat"); 和 Logger y = Logger.getLogger("wombat"); 是指向同一个对象,这样的话不需要到处传递对象的引用。
appender的意思是“输出的目的地”, 它可以是console,file,gui component,JMS,remote socket server,NT Event Log。任何写log的请求会被传递到这个logger所有的appender那里,同样也会传递到继承关系的上一级的logger的appender那里。appender会随着logger继承关系而附加继承。如果想停止这种附加继承,可以把additivity的标记设为false。
layout顾名思义是管输出的格式的,PatternLayout是Log4j的标准输出格式,具体内容请参照javadoc。简单归纳一下PatternLayout,一般的格式是%+格式修饰符+转换字符。转换字符就是要显示哪些内容,可以参照javadoc查到,格式修饰符的规律如下:
Format modifier | left justify | minimum width | maximum width | comment |
---|---|---|---|---|
%20c | false | 20 | none | Left pad with spaces if the category name is less than 20 characters long. |
%-20c | true | 20 | none | Right pad with spaces if the category name is less than 20 characters long. |
%.30c | NA | none | 30 | Truncate from the beginning if the category name is longer than 30 characters. |
%20.30c | false | 20 | 30 | Left pad with spaces if the category name is shorter than 20 characters. However, if category name is longer than 30 characters, then truncate from the beginning. |
%-20.30c | true | 20 | 30 | Right pad with spaces if the category name is shorter than 20 characters. However, if category name is longer than 30 characters, then truncate from the beginning. |
配置文件:log4j.properties (如果用eclipse,要放在src目录下)
log4j.rootLogger=debug, A1, A2
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%5p [%d{yyyy-MM-dd HH:mm:ss,SSS}] (%F:%L) - %m%n
log4j.appender.A2=org.apache.log4j.RollingFileAppender
log4j.appender.A2.File=example.log
log4j.appender.A2.MaxFileSize= 100KB
log4j.appender.A2.MaxBackupIndex=1
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%5p %t %c - %m%n
.java文件:Log4jTest.java
package com.suyang;
import org.apache.log4j.*;
public class Log4jTest {
private static Logger logger = Logger.getLogger(Log4jTest.class.getName());
public static void main(String[] args) {
logger.info("我在测试");
int x = 0;
try {
x = 5 / x;
}
catch(Exception e) {
logger.info(e);
logger.debug(e);
}
}
}
现在来说说上面配置文件的参数(把上面的配置文件分为三大块)
第一块:log4j.rootLogger=debug,A1,A2
a)log4j.rootLogger后面的第一个参数debug(这个值(显示的信息优先级)的取值范围为6种:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF)
b)上面例子中设置了DEBUG,则我程序中写的log.debug(),log.info(),log.warn()...级别>=DEBUG都会显示出来;
c)如果你设置了INFO,那么我程序中写的log.debug()是不会被显示出来的,log.info(),log.warn()...这些内容才会显示出来;
d)A1,A2两个为appender的名称(即,你可以每一个名称都对应一块内容),这两个参数结合第二,三大块内容来看;
第二块:这一块是用来定义A1的appender的几个参数
a)log4j.appender.A1=org.apache.log4j.ConsoleAppender(指明A1的显示方法,有下面几种取值)
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生新文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
b)log4j.appender.A1.layout=org.apache.log4j.PatternLayout(指明A1的显示信息的类型)
org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
c)log4j.appender.A1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n(指明A1的显示信息的格式)
%p 输出优先级,即ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF;
%r 输出自应用启动到输出该log信息耗费的毫秒数;
%c 输出所属的类目,通常就是所在类的全名;
%t 输出产生该日志事件的线程名;
%n 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n";
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如(yyyy-MM-dd HH:mm:ss,SSS);
%L 输出代码中的行数;
%l 输出代码中的所属文件中的方法下面的行数;
%F 输出代码中的文件名;
%m 输出代码中的行数;
切记,上面的参数是区分大小写的;
第三块:现在应该看得懂第三块的内容了吧!
另外,将日志写入DB的配置文件如下:
log4j.rootLogger=WARN,DATABASE
#直接使用log4j包中的文件
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
#与数据库建立连接
log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=icy
#指定要插入数据库的格式
log4j.appender.DATABASE.sql=INSERT INTO log4j (log_date, log_level, location, message) VALUES ('%d{ISO8601}', '%p', '%C,%L', '%m')
最后转几条小技巧:
1.NDC和MDC
2.动态修改日志配置文件
具体参看原文:[转自]http://rongsantang.ycool.com/post.1002996.html
[部分转自]http://www.javaeye.com/topic/185239
相关文章推荐
- Log4j使用指南
- Log4j使用指南
- log4j2.1使用指南[二] Web工程
- Log4j使用指南
- Commons-logging + Log4j 使用指南
- apche 通用日志包 和log4j使用指南
- apache log4j-1.2.15的使用
- log4j_使用指南
- Log4j使用指南
- log4j使用指南
- Log4j使用指南
- Log4J与JBuilder、Eclpse配合使用指南
- Log4j使用指南
- Commons-logging + Log4j 使用指南
- Log4j使用指南
- log4j使用指南
- Log4j使用指南
- Log4j使用指南
- log4j2.1使用指南[一] java工程
- 使用Maven时pom报错Multiple annotations found at this line: - Missing artifact log4j:log4j:jar:1.2.15: