Log4j2分析与实践-自定义日志级别

在代码中自定义日志级别

    为了在代码中自定义日志级别,使用Level.forName()方法,这个方法会根据指定的名称创建一个新的级别。在一个日志级别被定义之后,可以通过调用Logger.log并传递自定义级别参数来打印日志。

// 若不存在"VERBOSE"级别,创建一个"VERBOSE"级别
final Level VERBOSE = Level.forName("VERBOSE", 550);
final Logger logger = LogManager.getLogger();
// 使用自定义级别
logger.log(VERBOSE, "a verbose message");
    在创建一个级别的时候,第二个参数initLevel需要指定一个数字,它表示这个级别在标准级别中的位置。标准级别的位置信息如下:
OFF:0
FATAL:100
ERROR:200
WARN:300
INFO:400
DEBUG:500
TRACE:600
ALL:Integer.MAX_VALUE

在配置文件中自定义日志级别

    跟在代码中自定义日志级别类似,配置文件中需要在<CustomLevels>标签中自定义级别:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <!-- 使用前先定义级别 -->
  <CustomLevels>
    <CustomLevel name="DIAG" intLevel="350" />
    <CustomLevel name="NOTICE" intLevel="450" />
    <CustomLevel name="VERBOSE" intLevel="550" />
  </CustomLevels>
 
  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-7level %logger{36} - %msg%n"/>
    </Console>
    <File name="MyFile" fileName="logs/app.log">
      <PatternLayout pattern="%d %-7level %logger{36} - %msg%n"/>
    </File>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <!-- 满足级别的日志事件才会发送到Console -->
      <AppenderRef ref="Console" level="diag" />
      <AppenderRef ref="MyFile" level="trace" />
    </Root>
  </Loggers>
</Configuration>