log4j使用及相关说明

今天尝试着摸索了一下log4j,在这里跟大家分享一下。

首先,给大家一个log4j的下载地址:http://logging.apache.org/log4j/1.2/download.html

解压之后,里面有一个log4j-1.2.17.jar,把它添加到工程中。

【注:文中涉及到的代码都是我自己的代码,没有普遍性,大家用的时候注意修改一下】

第一步是获取日志记录器 log4j允许开发人员定义多个Logger。

默认有一个是rootLogger,它不能通过名字检索或者引用,获得方法是使用 Logger.getRootLogger();

我使用的是自己定义的Logger: static Logger logger = Logger.getLogger("mylog");

 

第二步是配置log4j的环境

有三种类型

BasicConfigurator.configure ():使用默认log4j环境

PropertyConfigurator.configure ( String configFilename) :使用Java的特性编写的配置文件

DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件

我使用的是第二种 PropertyConfigurator.configure("E:/project/mylog4j.properties");

注意,括号里最好写绝对路径。

 

第三步就是编写配置文件mylog4j.properties

这步的主要任务是确定三个内容:日志记录器(Logger),输出端(Appenders),格式化器(Layout)

如果是使用自己定义的Logger的话需要指明(如我前文题到的 mylog)

 

输出端有这几种:

org.apache.log4j.ConsoleAppender(控制台)

org.apache.log4j.FileAppender(文件)

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

如果是选择输出到文件需要写明日志文件的路径(最好是绝对路径吧)

 

log4j提供的layout有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

 

选择PatternLayout的话需要写明具体格式:

1)-X号: X信息输出时左对齐。

2)%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR。

3)%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921。

4)%r: 输出自应用启动到输出该log信息耗费的毫秒数。

5)%c: 输出日志信息所属的类目,通常就是所在类的全名。

6)%t: 输出产生该日志事件的线程名。

7)%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)。

8)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。

9)%%: 输出一个"%"字符。

10)%F: 输出日志消息产生时所在的文件名称。

11) %L: 输出代码中的行号。

12)%m: 输出代码中指定的消息,产生的日志具体信息。

13)%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行。

 

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式,如:

(1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。

(2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。

(3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。

(4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。

 

我的mylog4j.properties如下:

log4j.logger.mylog=INFO,A

log4j.appender.A=org.apache.log4j.FileAppender log4j.appender.A.File=e:/project/mylog4j.log

log4j.appender.A.layout=org.apache.log4j.PatternLayout

log4j.appender.A.layout.ConversionPattern=%F %L %d %p %c - %m%n

 

第四步就是在代码中使用log4j插入记录信息

logger.info("this is an info"); 
logger.warn("this is a warn"); 
logger.error("this is an error"); 
logger.bebug("this is a bebug"); 

 

每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。 log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。

error 指出虽然发生错误事件,但仍然不影响系统的继续运行。

warm 表明会出现潜在的错误情形。

info 一般和在粗粒度级别上,强调应用程序的运行全程。

debug 一般用于细粒度级别上,对调试应用程序非常有帮助。

 

也可以在代码中创建一个自定义类,将相关配置及函数调用写在一起

 1 public class log4j {
 2     static Logger logger = Logger.getLogger("mylog");
 3     public static void output(String level, String msg){
 4         PropertyConfigurator.configure("E:/project/mylog4j.properties");
 5 
 6         if(level.equals("debug")){
 7             if (logger.isDebugEnabled()){
 8                 logger.debug(msg);        
 9             }
10         }else if(level.equals("info")){
11             if (logger.isInfoEnabled()){
12                 logger.info(msg);
13             }            
14         }else if(level.equals("warn")){
15             logger.warn(msg);
16         }else if(level.equals("error")){
17             logger.error(msg);
18         }
19     }
20 }

 

在代码中使用可以直接按以下格式使用:

1 public static void main(String[] args)
2 {
3     System.out.println(("haha"));
4     System.out.println(("hehe"));
5     log4j.output("info","this is info.");
6     log4j.output("info","this is debug."); 
7     log4j.output("warn","this is warn.");
8     log4j.output("error","this is error.");
9 }

 


参考资料:

Apache Log4j配置说明http://zhangjunhd.blog.51cto.com/113473/21014

使用Log4j进行日志操作http://www.ibm.com/developerworks/cn/java/l-log4j/

lo4gj详解与实战http://www.iteye.com/topic/378077

log4j使用笔记http://www.cnblogs.com/eflylab/archive/2007/01/11/618001.html

 

 

 

 

posted @ 2014-03-27 11:00  Lettifay  阅读(248)  评论(0编辑  收藏  举报