log4j指南


        log4j
java开发人员开发中最常用的日志工具,但是未必每个人都很明白地使用它。
      
本文将log4j的一些知识点做了归纳总结,有助于开发人员更加清楚的掌握log4j,遇到一些与日志相关的问题,知道如何更好地处理。
 
1
Log4j.properties中至少有一个appender和一个logger

2log4j的初始化,通常我们需要把log4j.jarLog4j.properties或者log4j.xml放入classpathlog4j默认会在classpath中寻找log4j的配置文件,当然我们也可以指定配置文件所在的位置。
比如:
set JAVA_OPTS=%JAVA_OPTS% -Dlog4j.configuration=
或者在程序中指定PropertyConfigurator.configure()(DOMConfigurator.configure()).

3Log4j中有三个主要的组件,它们分别是LoggerAppenderLayout.
(1)Appender
用来指明log信息打印到什么地方
.
(2)Layout
的作用是控制Log信息的输出方式
.
(3)logger
指定log的名字,打印级别和采用哪种或者哪几种Appender

  

4、所有的logger都是继承于rootLogger,如果某个logger没有被分配level,那么它将从一个被分配了级别的最接近它的父logger那里继承level
    
所有logger最顶层的父loggerrootLogger,所以在定义日志的时候通常我会给rootLogger赋予一个level

5log打印的规则:
       
当某个loggerlogging request(printing method(error(),info()..))的级别高于或者等于该logger的级别(即在log4j.properties或者log4j.xml中定义)的时候,该logging request就为enable.
        
一旦该loggerlogging requestenable,那么该logging request将总会打印到该logger所有的appender中包括它的所有父loggerappender。(而不会管父logger的级别如何)。除非该logger的父loggeradditivity设置为false,默认的情况下为true

       
某个loggeradditivity设置为false,表示log只打印到本logappender中,而不再打印到其父loggerappender

6、最简单的log4j.properties定义
log4j.rootLogger=debug, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

7log4j定义说明

8log4j是线程安全的,所以我们一般建议定义log时采用static
private static final Log log = LogFactory.getLog(Main.class);

9、性能优化:
推荐:
if (log.isDebugEnabled()) {
    log.debug("hello" + i + j);
}
而不是直接在程序中调用:
log.debug("hello" + i + j);
这样在logger打印条件不满足的情况下就不用执行字符串的操作。

10、实际开发过程中,我们通常会使用Jakarta Commons Logging (JCL),它提供的是一个日志(Log)接口(interface),允许程序开发人员使用不同的具体日志实现工具:Log4J, JDK 1.4等。
如果应用程序的classpath中有log4j, Commons Logging则使用相关的包装(wrapper)(Log4JLogger)
如果应用程序运行在jdk1.4的系统中, Commons Logging使用相关的包装类(Jdk14Logger) 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值