您的位置:首页 > 其它

[转] 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查到,格式修饰符的规律如下:

Format modifier left justify minimum width maximum width comment
%20cfalse20noneLeft pad with spaces if the category name is less than 20 characters long.
%-20ctrue20noneRight pad with spaces if the category name is less than 20 characters long.
%.30cNAnone30Truncate from the beginning if the category name is longer than 30 characters.
%20.30cfalse2030Left 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.30ctrue2030Right 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: