log4j学习

1.log4j包含三个组件,分别是:LOGS(记录器)、Appenders(输出源)、layouts(输出源)!可以简单的认为是日志类别、日志输出到什么地方、日志以何种形式输出。

1、 Loggers   

         Loggers组件在此系统中被分为五个级别:(最小)DEBUG、INFO、WARN、ERROR和FATAL(最大)。这五个级别是有顺序的,DEBUG Log4j有一个规则:假设Loggers级别为P,如果在Loggers中发生了一个级别Q比P高,则可以启动,否则屏蔽掉。 假设你定义的级别是info,那么error和warn的日志可以显示而比他低的debug信息就不显示了。  

        其语法表示为:  

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

       org.apache.log4j.FileAppender(文件)  

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

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

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

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

 

package org.apache.log4j;
publicclass Logger {
// Creation and retrieval methods:
publicstatic Logger getRootLogger();
publicstatic Logger getLogger(String name);
// printing methods:
publicvoid debug(Object message);
publicvoid info(Object message);
publicvoid warn(Object message);
publicvoid error(Object message);
publicvoid fatal(Object message);
// generic printing method:
publicvoid 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实例。

 

privatestatic 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;
publicclass Test {
static Logger log = Logger.getLogger(Test. class );
publicvoid log(){
log .debug( "Debug info." );
log .info( "Info info" );
log .warn( "Warn info" );
log .error( "Error info" );
log .fatal( "Fatal info" );
    }
publicstaticvoid 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。后面两行都是设置日志格式的。
5.Apache Log介绍集
6.参考资料
[1] Log4j官方手册
[2] Log4j最简入门

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值