Log4J概念

2019-12-27  本文已影响0人  atdoking

Log4j中有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout)

public class Demo1 {
    @Test
    public void fun1() {
        Logger logger = Logger.getLogger(Demo1.class);
        logger.addAppender(new ConsoleAppender(new SimpleLayout()));
        logger.setLevel(Level.WARN);
        
        logger.debug("调试");
        logger.info("信息");
        logger.warn("警告");
        logger.error("错误");
        logger.fatal("大错");
    }
}
#配置根日志器级别为DEBUG,目的地为A1
log4j.rootLogger=DEBUG,A1
#配置A1目的地
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#配置A1目的地的输出样式
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

1、日志级别
在Log4j中日志消息分为五个级别,级别由高到低排列如下:

      @Test
    public void fun() {
        log.setLevel(Level.ERROR);
        log.debug("hello log4j!");
        log.info("hello log4j!");
        log.warn("hello log4j!");
        log.error("hello log4j!");
        log.fatal("hello log4j!");
    }

上面代码中,只有error()和fatal() 两个方法的输出会完成,其他级别的输出都不会完成。因为设置日志器的级别为Level.ERROR后,只有高于ERROR级别的日志才能输出。

2、日志器名称
  在创建日志器时,需要给日志器指定一个名称:Loggerlog = Logger.getLogger(“hello”);

日志器的名称不只是一个名称而已,日志器的名称说明了日志器之间的父子关系。子日志器会继承父日志器的Appender和Level。

日志器的父子关系是通过日志器的名称来决定的,例如名称为cn.itcast的日志器是cn.test.logger的日志器的爸爸。cn.test.logger会继承cn.test的Appender以及Level。

@Test
 
    publicvoid fun() {
 
       Logger log = Logger.getLogger("cn.itcast");
 
       Appender appender = new ConsoleAppender(new SimpleLayout());
 
       log.addAppender(appender);
 
       log.setLevel(Level.ERROR);      
 
       Logger log1 = Logger.getLogger("cn.itcast.logger");[崔2] 
 
       log1.debug("看不见!");
 
    }

通常我们创建日志器都是使用当前类的名称来创建:

Logger log =Logger.getLogger(Demo.class.getName());

这样我们可以通过配置父日志器来改变日志器的Appender和Level。

配置文件

1、log4j配置概述
log4j有两种配置文件,log4j.properties和log4j.xml。因为log4j是比较简单的组件,所以建议使用log4j.properties。

如果你把log4j放到项目的src下(即放到classes下),并且命名为log4j.properties,那么log4j会自动加载这个配置文件,这也是我们最为常用的方式。
2、根日志器
在配置文件中,需要配置名为log4j.rootLogger的日志器,它就是根日志器。其他的日志器都是根日志器的子日志器,会继承根日志器的目的地,以及级别等。

log4j.properties

log4j.rootLogger表示根日志器,DEBUG是指定根日志器的输出级别,只要大于等于DEBUG级别的日志就可以输出。A1是说明目的地(Appender)的名称;

log4j.rootLogger=DEBUG,A1
 
log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

log4j.appender.A1表示目的地,org.apache.log4j.ConsoleAppender表示目的地为控制台目的地,即输出结果在控制台上显示;
log4j.appender.A1.layout表示A1这个目的地的格式化器,org.apache.log4j.SimpleLayout表示简化格式化器。

publicvoid fun1() {
 
       Logger log = Logger.getLogger(Demo1.class);
 
       log.debug("Hello");
 
    }

3、其他日志器

当然,也可以去配置其他的日志器,语法如下:

我们不只配置了一个根日志器,还配置了一个名称为cn.test的日志器。继承关系你是懂得对吧。所有日志器如果名称是以cn.test前缀的,那么都会继承上面的配置,如果不是,那么继承的就是root日志器了。

log4j.rootLogger=DEBUG,A1
 
log4j.logger.cn.itcast=WARN,A1
 
log4j.appender.A1=org.apache.log4j.ConsoleAppender
 
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

Appender

1、Appender概述
Appender是用来指定输出目标的类,你可以叫它目的地。上面我们使用的ConsoleAppender就是用来向控制台输出的目的地。常用的目的地有:

2、ConsoleAppender
ConsoleAppender的目标是控制台!这也不多做解释

log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

3、FileAppender

FileAppender的目标是磁盘文件

4、RollingFileAppender

log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

RollingFileAppender是FileAppender的子类,它的作用是当日志文件大小超出文件大小大限时,会把日志文件转换成备份文件,然后再生成一个新的日志文件。

例如日志文件名为log.txt,设置文件大小上限为1KB,当log.txt文件的大小超出了1KB后,把log.txt的名称转换成log.txt.1,然后再生成一个log.txt,新的日志会写入到新的log.txt文件中。当log.txt的大小再次达到1KB时,把log.txt.1名称修改成log.txt.2,把log.txt修改成log.txt.1,然后再生成一个新的log.txt文件。

还可以设置文件的个数,当设置备份文件的个数为3时,表示最多可以有3个文件。当文件达到3后,再次达到1KB时,那么会删除最后一个文件。例如当前已经存在log.txt、log.txt.1、log.txt.2,这时如果log.txt又达到了1KB时,那么删除log.txt.2,然后把log.txt.1修改成log.txt.2,再把log.txt修改成log.txt.1,然后再创建log.txt文件。

4、DailyRollingFileAppender

DailyRollingFileAppender会根据设定的时间频率生成备份文件。

log4j.rootLogger=DEBUG,A1
 
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
 
log4j.appender.A1.File=log.txt
 
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
 
log4j.appender.A1.layout=org.apache.log4j.SimpleLayout

Layout

1、Layout种类
  我们需要给目的地指定格式化器,这样目的地就可以按照格式化器指定的格式来输出日志信息了。我们刚刚一直都在使用SimpleLayout格式化器,而我们常用的格式化器是PatternLayout!

2、PatternLayout
可以为PatternLayout指定一个模板,目的地会按模板来输出日志信息。例如模板为:hello: %m,其中%m是一个模式字符,下面介绍一下模式字符:

在web项目中的配置

log4j.rootLogger=INFO,c1,f1
 
 
 
log4j.appender.c1=org.apache.log4j.ConsoleAppender
 
log4j.appender.c1.layout=org.apache.log4j.PatternLayout
 
log4j.appender.c1.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}[%p]%m[%t]%c[%l]%n
 
 
 
log4j.appender.f1.File=${catalina.home}/logs/myproject.txt
 
log4j.appender.f1=org.apache.log4j.DailyRollingFileAppender
 
log4j.appender.f1.layout=org.apache.log4j.PatternLayout
 
log4j.appender.f1.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}[%p]%m[%t]%c[%l]%n

创建名称为cn.test的日志器
创建名称为cn.test.lgger的日志器,它继承名为cn.test的格式化器

指定AI发送器的类型为FileAppender
指定A1发送器的目标文件为log.txt

指定追加方式为true,即不会覆盖原有日志信息。默认即为true,所以可以不给出这个配置

指定发送器的格式化器为简单格式化器

指定A1发送器的类型

指定A1发送器的目标文件

指定文件大小上限为1KB

指定多大个日志文件

指定格式化器类型

指定A1发送器的类型

指定A1发送器的目标文件

指定A1发送器的时间频率为每天生成一个备份文件。时间频率也是备份文件的后缀名,例如:log.txt.2013-05-06,如果没有给出’.’,那么就是log.txt2013-05-06

指定tomcat的logs目录存放日志文件,如果希望存放到项目目录下,可以使用绝对路径。

上一篇 下一篇

猜你喜欢

热点阅读