本文将介绍如何在程序中使用 Log4j。 author: ZJ 07-3-17
Blog: http://zhangjunhd.blog.51cto.com/
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(Stringname);
//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, Objectmessage);
}
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实例。
private 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 filename and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p[%t] (%F:%L) - %m%n
结果
INFO [main] ( Test.java:16 ) - Infoinfo
WARN [main] ( Test.java:17 ) - Warninfo
ERROR [main] ( Test.java:18 ) - Errorinfo
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的日志都不会被记录。比如使用这个配置文件的话,我刚开始举的那个类中:
这句话是不起作用的,因为 debug的级别小于 info。这样就很容易控制什么信息在调试的时候要显示,什么信息在发布的时候要去掉。这些都不用改代码。
配置 stdout,这个名字是随便取的,你可以叫它 A:
log4j.appender.A=org.apache.log4j.ConsoleAppender
那么上面的 rootLogger的参数 stdout也要改成 A,其他用到的地方当然也要改。这里的关键不是名字,而是 appender类型,比如这里的“ ConsoleAppender”,指输出到 Console。后面两行都是设置日志格式的。
5.Apache Log 介绍集
[1] Apache Log4j配置说明
[2] Apache Log4j使用实例
[3] Apache Commons-logging使用实例
[4] 如何自建 appender扩展 Log4j框架
6 .参考资料
[1] Log4j官方手册
[2] Log4j最简入门
http://afront.bokee.com/6157060.html
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com