log4j2在项目中的使用

log4j2的下载地址

apache的日志组件官网:http://logging.apache.org/
log4j2下载(提供的windows的下载地址,其他版本或者linux的版本请到官网):http://mirrors.tuna.tsinghua.edu.cn/apache/logging/log4j/2.11.2/apache-log4j-2.11.2-bin.zip
解压后有很多jar包,仅需两个

log4j-api-2.11.2.jar
log4j-core-2.11.2.jar

log4j2在maven项目中的使用

  1. 创建maven项目
    在这里插入图片描述2.添加依赖(在maven仓库搜索和log4j2的官方文档)
    <dependencies>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.2</version>
      </dependency>
      <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.2</version>
      </dependency>
    </dependencies>
  1. 添加配置文件(在resources目录下添加log4j2.xml)

 这里是简单的配置文件,和之前的log4j的配置文件相比,结构更清晰一些,以下只是一个追加器和一个根记录器的配置。

<?xml version="1.0" encoding="utf-8" ?>
<!--
    status属性:查看log4j的装配过程,值为OFF表示关闭,值为debug等日志级别为查看日志过程
-->
<configuration status="OFF">
    <!--定义附加器,需要在appender标签中定义-->
    <Appenders>
        <!--
            name属性:定义追加器的标识名称
            target:定义输出日志形式    SYSTEM_OUT/SYSTEM_ERR
        -->
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="[log4j2-demo]  %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L  %m%n"/>
        </Console>
    </Appenders>
    
    <Loggers>
        <!-- 定义根日志 -->
        <!-- level : 指定根日志的日志输出级别 -->
        <Root level="info">
            <!-- 引用日志追加器,和上面定义的追加器的名称一样-->
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>

</configuration>
  1. 运行时类
public class log4j2demo {

    public static void main(String[] args) {
        Logger logger = LogManager.getLogger(log4j2demo.class);

        logger.fatal("this is fatal message");
        logger.error("this is error message");
        logger.warn("this is warn message");
        logger.info("this is info message");
        logger.debug("this is debug message");
        logger.trace("this is trace message");
    }
}

4.运行结果
配置错误或者不配置,按默认的配置输出,类似结果如下

ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console).......
10:39:49.129 [main] FATAL com.emptycloud.blog.log4j2demo - this is fatal message
10:39:49.133 [main] ERROR com.emptycloud.blog.log4j2demo - this is error message

正确

[log4j2-demo]  2019-02-15 11-22-39.810 [FATAL] com.emptycloud.blog.log4j2demo:19  this is fatal message
[log4j2-demo]  2019-02-15 11-22-39.815 [ERROR] com.emptycloud.blog.log4j2demo:20  this is error message
[log4j2-demo]  2019-02-15 11-22-39.815 [WARN ] com.emptycloud.blog.log4j2demo:21  this is warn message
[log4j2-demo]  2019-02-15 11-22-39.815 [INFO ] com.emptycloud.blog.log4j2demo:22  this is info message

比较完整的配置文件介绍

<?xml version="1.0" encoding="utf-8" ?>
        <!--
            status属性:查看log4j的装配过程,值为OFF表示关闭,值为debug等日志级别为查看日志创建过程(正常情况下只有debug和trace级别日志显示)
            monitorInterval : 配置文件更改后重新加载,不用重启应用,单位秒
        -->
<configuration status="warn" monitorInterval="600">
<!--全局属性声明,方便后面使用${属性名称} 进行引用-->
<properties>
    <!-- /代表的是盘符根目录, 还有诸如 .代表当前当前项目路径 ,我们可以使用@ 名称@从pom.xml中动态获取这些值 -->
    <property name="LOG_HOME">/log</property>
    <property name="DEBUG_FILE_NAME">debug</property>
    <property name="ERROR_FILE_NAME">error</property>
</properties>

<!--定义附加器,需要在appender标签中定义-->
<Appenders>
    <!--
        name属性:定义追加器的标识名称
        target:定义输出日志形式    SYSTEM_OUT/SYSTEM_ERR
    -->
    <Console name="console" target="SYSTEM_OUT">
        <!--
            ThresholdFilter:指定追加器过滤日志的级别
            level:设定级别
            onmatch:匹配符合条件的日志输出
            onMismatch:拒绝不符合条件
        -->
        <ThresholdFilter level="warn" onmatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="[log4j2-demo]  %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %C:%L  %m%n"/>
    </Console>

    <!--
        File : 文件追加器
        append :决定新产生的日志是追加还是覆盖(true为追加(默认))
        FileName : 决定日志文件的名称和位置
    -->
    <File name="file" FileName="${LOG_HOME}/file.log" append="true">
        <ThresholdFilter level="error" onmatch="ACCEPT" onMismatch="DENY"/>
        <PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %c:%L %m%n"/>
    </File>

    <!--
        以天//时为单位打印日志
        filePattern指定封存日志文件的格式
    -->
    <RollingFile name="rollingFile" fileName="${LOG_HOME}/rollfile.log"
                 filePattern="${LOG_HOME}/$${date:yyyy-MM}/rollfile-%d{yyyy-MM-dd}.log">
        <!--
            间隔时间备份策略
            modulate为true表示以0点为边界进行时间偏移计算,
            例:每隔4个小时进行日志封存,当前时间为3点,那么1个小时后进行一次日志封存(将之前的日志放置到filePattern指定的封存位置)
            interval:间隔时间(其单位有filePattern中-dd HH%d{yyyy-MM}的最小单位来决定,)
        -->
        <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
        <PatternLayout pattern="[log4j3-demo] %-d{yyyy-MM-dd HH-mm-ss.SSS} [%-5p] %c:%L %m%n"/>
        <ThresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>
    </RollingFile>

    <!--
        以大小为策略进行日志封存,%i用于记录封存文件的生成先后顺序(),.zip/.gz等指定压缩格式
        immediateFlush:log4j2接收到日志事件时,是否立即将日志刷到磁盘。默认为true-->
    <RollingFile name="sizedRollFile" fileName="${LOG_HOME}/sizerollfile.log" immediateFlush="true"
                 filePattern="${LOG_HOME}/$${date:yyyy-MM-dd}/sizerollfile-%d{yyyy-MM-dd HH}-%i.log.zip">
        <PatternLayout pattern="[log4j2-demo] %-d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] %c:%L %m%n"/>
        <!-- 当有多个策略时,使用Policies 标签-->
        <Policies>
            <TimeBasedTriggeringPolicy />
            <!--基于大小的触发策略,size指定大小-->
            <SizeBasedTriggeringPolicy size="10 kB"/>
        </Policies>
        <Filters>
            <thresholdFilter level="debug" onmatch="ACCEPT" onMismatch="DENY"/>
        </Filters>
        <!--
            控制生成的封存文件数量的一种策略,max控制filePattern 中的%i ,不指定默认为7,
            (就是你只能看见7个封存的文件,多余的你可以理解为覆盖掉了)
            这虽然也是一种策略,但是放置在策略标签之外
        -->
        <DefaultRolloverStrategy max="20" />
    </RollingFile>
</Appenders>

<Loggers>
    <!-- 定义根日志 -->
    <!--
        level : 指定根日志的日志输出级别,ThresholdFilter生效其设置的日志级别输出取决于此
        例:如果跟记录器的日志级别设置成error,那么追加器也不会输出error级别一下的日志
    -->
    <Root level="debug">
        <!-- 引用日志追加器,和上面定义的追加器的名称一样-->
        <AppenderRef ref="console"/>
        <AppenderRef ref="file"/>
        <AppenderRef ref="rollingFile"/>
        <AppenderRef ref="sizedRollFile"/>
    </Root>

    <!--
        Logger:定义其他记录器,和根记录器存在继承关系, 一般用于设置单独的包的日志打印级别
        additivity : 设定是否继承父记录器的追加器
    -->

    <Logger name="com.emptyCloud.blog" level="debug" additivity="false">
        <AppenderRef ref="console"/>
    </Logger>
</Loggers>

</configuration>

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值