1.Logger类

通过Logger类的静态方法Logger.getRootLogger得到RootLogger。所有其他的loggers是通过静态方法Logger.getLogger来实例化并获取的。这个方法Logger.getLogger把所想要的logger的名字作为参数。 Logger类的一些其它基本方法在下面列出:



 

package org.apache.log4j;

public class Logger {

 

// Creation and retrieval methods:

public static Logger getRootLogger();

public static Logger getLogger(String name);

 

// printing methods:

public void debug(Object message);

public void info(Object message);

public void warn(Object message);

public void error(Object message);

public void fatal(Object message);

 

// generic printing method:

public void log(Level l, Object message);

}

 

 


 

2. getLogger方法

以一样的参数名字调用getLogger方法,返回的reference总是指向完全相同的logger对象。例如,在这里:

Logger x = Logger.getLogger("wombat");

Logger y = Logger.getLogger("wombat");

x和y指向完全相同的logger对象。

 

3.Log4j使用流程

1)根据配置文件初始化log4j

       log4j可以使用3种配置器来初始化:

BasicConfigurator,DOMConfigurator,PropertyConfigurator。

这里用的是PropertyConfigurator。使用PropertyConfigurator适用于所有的系统。如下的语句。

PropertyConfigurator.configure("log4j.properties");

就以log4j.properties为配置文件初始化好了log4j环境。对于一般的java project 可以不使用上面的语句初始化log4j,log4j会自动在classpath下,找到配置文件并初始化。如果log4j不能自动初始化配置文件,那么就需要用上面的方法进行初始化。

       注意:初始化配置文件,最好只在系统启动的时候执行一次,如果执行多次,一是浪费资源,二就是对于老版本的log4j,使用DailyRollingFileAppender时,可能会出现问题。

 

2)导入org.apache.log4j.Logger;及相关包。

 

3)在需要使用log4j的地方获取Log实例。

static Logger log = Logger.getLogger("MyCLASS.class");

 

4)使用Logger对象的debug,info,fatal...方法。

log.debug("it is the debug info");

 

4.Log4j使用示例

Test.java



 

import org.apache.log4j.Logger;

 

public class Test {

    static Logger log= Logger.getLogger(Test.class);

    public void log(){

       log.debug("Debug info.");

       log.info("Info info");

       log.warn("Warn info");

       log.error("Error info");

       log.fatal("Fatal info");

    }

    public static void main(String[] args) {

       Test test = new Test();

       test.log();

    }

}

 

 


 

Log4j.properties(具体配置属性定义见《Log4j配置说明》)



 

log4j.rootLogger=info, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

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

# Pattern to output the caller's file name and line number.

log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

 


 

结果

INFO [main] (Test.java:16) - Info info

WARN [main] (Test.java:17) - Warn info

ERROR [main] (Test.java:18) - Error info

FATAL [main] (Test.java:19) - Fatal info

 

分析:

Test.java

“Logger.getLogger(Test.class);”这里的“Test.class”事实上传进去的是Test这个类的完整路径(包名+类名),“test.Test”。这样如果存在“test”这个Log那么Test这个Log就继承它,否则就继承rootLogger。

 

Log4j.properties

第一行,配置log4j.rootLogger。应为它是根,必须配置,否则别的Log无法继承。其他的Log可以配置也可以不配置。等号后面的第一个参数表示日志级别,可以填五个级别中的一种(Log4j默认把日志信息分为五个等级debug < info < warn < error < fatal),后面的参数都是让Log知道输出到哪里,如果你想让日志输出到两个地方就加两个输出参数,比如:

log4j.rootLogger=info, stdout

这里的info表示,该Log的日志级别为info,所有级别小于info的日志都不会被记录。比如使用这个配置文件的话,我刚开始举的那个类中

log.debug("Debug info.");

这句话是不起作用的,因为debug的级别小于info。这样就很容易控制什么信息在调试的时候要显示,什么信息在发布的时候要去掉。这些都不用改代码。

       配置stdout,这个名字是随便取的,你可以叫它A:

log4j.appender.A=org.apache.log4j.ConsoleAppender

那么上面的rootLogger的参数stdout也要改成A,其他用到的地方当然也要改。这里的关键不是名字,而是appender类型,比如这里的“ConsoleAppender”,指输出到Console。后面两行都是设置日志格式的。

付:log4j.property

1) 把log4j.properties或是log4j.xml放在src根下(ClassPath路径中),或者结合spring的配置在web.xml中

> log4j.properties内容举例如下:

log4j.rootCategory=DEBUG, stdout, R

#Console config

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

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

log4j.appender.stdout.layout.ConversionPattern=<%d> <%-5p> <%c> - %m(%F:%M:%L)%n

#File config

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=${catalina_home}/logs/test.log

log4j.appender.R.MaxFileSize=100KB

log4j.appender.R.MaxBackupIndex=0

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

log4j.appender.R.layout.ConversionPattern=<%d> <%-5p> <%c> - %m(%F:%M:%L)%n

#Package config

log4j.logger.org.apple=DEBUG

log4j.logger.org.apache.commons=ERROR

log4j.logger.org.springframework=ERROR

log4j.logger.org.apache.struts=ERROR

 

Java代码 

log4j.rootLogger=DEBUG, stdout, file   

  

### direct log messages to stdout ###   

log4j.appender.stdout=org.apache.log4j.ConsoleAppender   

log4j.appender.stdout.Target=System.out   

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

log4j.appender.stdout.layout.ConversionPattern=%m%n   

  

### direct messages to file hibernate.log ###   

log4j.appender.file=org.apache.log4j.RollingFileAppender   

log4j.appender.file.File=hibernate.log   

log4j.appender.file.MaxFileSize=100KB   

log4j.appender.file.MaxBackupIndex=1  

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

log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n   

  

### set log levels - for more verbose logging change 'info' to 'debug' ###   

  

log4j.logger.org.hibernate=info   

  

### log just the SQL   

#log4j.logger.org.hibernate.SQL=debug   

  

### log JDBC bind parameters ###   

log4j.logger.org.hibernate.type=info