记录日志之log4j2

log4j2

apache官方已经声明log4j1.x不再更新,建议开发者使用log4j2,它相比1.x在使用上发生了较大的变化。
使用log4j2记录日志的步骤
1.下载jar包
log4j2官网下载:http://logging.apache.org/log4j/2.x/
百度网盘下载:http://pan.baidu.com/s/1minAspq
下载后需要将下面两个jar包导入到项目中

  • log4j-api-2.9.1.jar
  • log4j-core-2.9.1.jar

2.添加日志输出控制文件
在log4j2中的配置文件是 XML 格式的文件,不再支持properties 文件。在src目录下创建log4j2.xml文件,里面写上下面内容。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="OFF">
    <Appenders>
        <!-- console -->
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <!-- file -->
        <File name="file" fileName="log/output.log" append="true">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
        <!-- rollingFile -->
        <RollingFile name="rollingFile" fileName="logs/app.log"
            filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <SizeBasedTriggeringPolicy size="1kb" />
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

3.编写日志记录代码

导包的时候注意Logger 与 LogManager 都是 org.apache.logging.log4j 包中的类,而不是org.apache.log4j包中的。另外在创建记录日志对象时,使用的是LogManager类

package com.monkey1024.test;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

/**
 * log4j2
 *
 */
public class Log4j2Test01 {

    public static void main(String[] args) {
        //创建记录日志的对象
        Logger log = LogManager.getLogger(Log4j2Test01.class);

        //下面语句会根据log4j2.xml中的日志级别输出
        log.debug("debug信息");
        log.info("info信息");
        log.warn("warn信息");
        log.error("error信息");


    }

}

上面代码会将info以上级别的日志信息输出到控制台中。

日志输出控制文件分析

若开发者没有设置 log4j2.xml,则系统会使用默认的日志配置:只会输出到控制台 error 级别的信息。

configuration标签

configuration标签的 status 属性用于设置 Log4j2 自身运行的日志显示级别,一般为OFF,不显示,也可以设置为 ERROR、DEBUG 等其它级别。

Console标签
Console标签的 target 属性用于设置输出的目标形式,其值一般为:SYSTEM_OUT 或 SYSTEM_ERR

File标签
File标签的 fileName 属性用于设置文件的文件保存路径及文件名。如本例的意思是,日志文件名为 output.log,将其存放在当前项目的根目录下的 log 子目录中,如果log目录不存在会自动创建。

append 属性用于设置是否以追加方式将日志写入文件中。

RollingFile标签
fileName 指定存放目录及第一个日志文件名。filePattern 指定新创建的日志文件的文件名。本例还会对文件进行压缩。

SizeBasedTriggeringPolicy子标签用于指定每一个日志文件最大文件大小。当达到这个指定值后,会自动再新建一个日志文件。

loggers标签
用于配置根Logger 对象,用来指定所使用的日志记录器,及显示的级别。
其子标签root用于指定所使用的日志记录器。该子标签的属性 level 用于指定显示级别,主要是通过root的子标签appender-ref来引用appenders中定义好的记录器。
需要注意的是,只要在appenders中定义了File、 RollingFile等,且在其中指定了日志存放的目录,无论是否在appender-ref中引用,这些目录都会自动创建。