7 Log4j 日志级别 Level类

Log4j 日志级别Level类

org.apache.Log4j.Level类定义了日志级别,您可通过继承Level类定制自己的级别。

级别 描述
OFF 最高级别,用于关闭日志。
FATAL 指明非常严重的错误事件,可能会导致应用终止执行。
ERROR 指明错误事件,但应用可能还能继续运行。
WARN 指明潜在的有害状况。
INFO 指明描述信息,从粗粒度上描述了应用运行过程。
DEBUG 指明细致的事件信息,对调试应用最有用。
TRACE DEBUG级别的粒度更细。
ALL 所有级别,包括定制级别。

日志级别是如何工作的

在一个级别为q的logger对象中,一个级别为p的日志请求在p >= q的情况下是开启的。该规则是Log4j的核心,它假设级别是有序的。
对于标准级别,其顺序为:ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF
例如设置级别为DEBUG,则比DEBUG高的INFO,WARN,ERROR,FATAL都是开启的.

在程序中设置日志级别

使用logger对象的setLevel(Level.级别)方法可以设置期望的日志级别:

SetLevelByMethod.java

/Log4jDemo/src/demo/level/SetLevelByMethod.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package demo.level;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

public class SetLevelByMethod
{
private static Logger log = Logger.getLogger(SetLevelByMethod.class);

public static void main(String[] args)
{
// 使用方法设置日志级别
log.setLevel(Level.WARN);
log.trace("Trace Message!");
log.debug("Debug Message!");
log.info("Info Message!");
log.warn("Warn Message!");
log.error("Error Message!");
log.fatal("Fatal Message!");
}
}

运行效果

1
2
3
2020-08-03 18:32:58 WARN  SetLevelByMethod:17 - Warn Message!
2020-08-03 18:32:58 ERROR SetLevelByMethod:18 - Error Message!
2020-08-03 18:32:58 FATAL SetLevelByMethod:19 - Fatal Message!

可以看到,程序只输出WARM级别和比WARN更高的级别的日志输出

使用配置文件设置日志级别

Log4j提供了基于配置文件设置日志级别的功能.当您需要改变调试级别时,只需要修改配置文件即可,不用再去修改代码。

log4j.properties

下面这个例子和上面那个例子功能一样,不过不用使用setLevel(Level.WARN)方法,只需修改配置文件:

/Log4jDemo/Log4jConfig/Level/log4j.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 输出到控制台
# Root logger option
#ALL<TRACE<DEBUG<INFO< WARN< ERROR< FATAL< OFF
#log4j.rootLogger=OFF, STDOUT
#log4j.rootLogger=FATAL, STDOUT
#log4j.rootLogger=ERROR, STDOUT
#log4j.rootLogger=WARN, STDOUT
log4j.rootLogger=INFO, STDOUT
#log4j.rootLogger=DEBUG, STDOUT
#log4j.rootLogger=TRACE, STDOUT
#log4j.rootLogger=ALL, STDOUT

# Direct log messages to STDOUT
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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

SetLevleByConfig.java

/Log4jDemo/src/demo/level/SetLevleByConfig.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package demo.level;

import org.apache.log4j.Logger;

public class SetLevleByConfig
{
private static Logger log = Logger.getLogger(SetLevleByConfig.class);

public static void main(String[] args)
{

log.trace("Trace Message!");
log.debug("Debug Message!");
log.info("Info Message!");
log.warn("Warn Message!");
log.error("Error Message!");
log.fatal("Fatal Message!");
}
}

运行结果

1
2
3
4
2020-08-03 18:49:27 INFO  SetLevleByConfig:14 - Info Message!
2020-08-03 18:49:27 WARN SetLevleByConfig:15 - Warn Message!
2020-08-03 18:49:27 ERROR SetLevleByConfig:16 - Error Message!
2020-08-03 18:49:27 FATAL SetLevleByConfig:17 - Fatal Message!