log4j使用

这几天在写一部分代码,然后感觉以前自己写代码的方式都是在有问题的地方直接把结果在控制台中打印出来,这种处理方式对于自己写一些代码倒是没有什么问题,但是对于一些线上系统的话就很难跟踪问题了,所以还是准备采用log4j来记录一下日志信息,下面记录了一些log4j的基本用法,好在以后忘记的时候查询。

虽然log4j使用起来比较简单,但是要完全弄清楚还是具有比较多的内容,所以这里就简单地先介绍一下我用的方式,等以后有另外的使用的时候再进行补充。

一个基本的配置文件log4j.properties

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
### set log levels ###
log4j.rootLogger = debug, stdout, D, E

### 输出到控制台 ###
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 = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n

### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

### 保存异常信息到单独文件 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = logs/error.log ## 异常日志文件名
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n

下面说一下我最开始理解的时候有一点混的东西:

1
2
### set log levels ###
log4j.rootLogger = debug, stdout, D, E

上面这一行代码是配置日志记录的级别以及日志输出的目的地,其中debug表示记录的级别,这里的级别的意思就是超过什么等级的信息需要被日志进行记录,在log4j中预定义的级别如下:

1
2
3
4
5
FATAL      0  
ERROR 3
WARN 4
INFO 6
DEBUG 7

其中值越小表示级别越高,日志输出的时候只有高于配置级别的日志才会被记录。

debug后面的三个表示日志输出的目的地,也就是对应配置文件下面的三个appender。这里的stdoutDE都是appender的名字,可以随意设置。

在appender的具体配置中,有Threshold选项,该选项表示通过该appender记录的日志的最低级别,但是这个级别要和rootLogger中设置的级别兼容,也就是说日志记录的时候,最先经过的过滤器就是rootLogger。

log4j提供了几种不同类型的目的地、输出格式、格式化的形式等内容。

代码中使用方式

1
2
3
4
5
6
7
8
9
10
11
12
class Test {
private static Logger logger = Logger.getLogger(Test.class);

public void test() {
logger.fatal("msg");
logger.error("msg");
logger.warn("msg");
logger.info("msg");
logger.debug("msg");
}

}

上面介绍的配置文件程序在启动的时候会自动加载,使用的过程中就不用再提供其它的配置了(当然也可以采用其它的方式进行配置),使用的时候一般在类中添加静态变量,然后在需要记录日志的地方调用logger的上述集中方法就好,这几种方法和上面的日志输出级别一一对应。

参考资料

  1. 官方文档
  2. 配置log4j