Log4j2 -- 使用

目录

简介

特性

使用

基本配置文件

slf4j + log4j2

日志拆分

简介

  • Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题
  • 被誉为是目前最优秀的Java日志框架

特性

  • 在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback高18倍,延迟低
  • 与Logback一样,Log4j2可以在修改时自动重新加载其配置
  • 与Logback不同,它会在重新配置发生时不会丢失日志事件

使用

依赖

        <!-- log4j2日志门面 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.12.1</version>
        </dependency>
        <!-- log4j2日志实现 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.12.1</version>
        </dependency>

单独使用Log4j2,默认为error级别信息才打印

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

public class LogTest {
    @Test
    public void test(){
        Logger logger = LogManager.getLogger(LogTest.class);
        logger.fatal("fatal信息");
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");
    }
}

注意Logger使用的是 org.apache.logging.log4j包下的

控制台输出如下

ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
18:29:06.256 [main] FATAL LogTest - fatal信息
18:29:06.263 [main] ERROR LogTest - error信息

基本配置文件

默认路径 resouce/log4j2.xml

  • %-10level 级别:案例为设置10个字符,左对齐
  • %d{yyyy-MM-dd HH:mm:ss.SSS}:日期
  • %c: 当前类全限定名
  • %M: 当前执行日志的方法
  • %L: 行号
  • %thread: 线程名称
  • %m或者%msg: 信息
  • %n: 换行
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!--配置全局通用属性-->
    <properties>
        <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c %M %L %thread %m%n"/>
    </properties>

    <!-- 配置appender -->
    <Appenders>
        <!-- 配置控制台输出 -->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}"/>
        </Console>
    </Appenders>
    <!-- 配置logger -->
    <Loggers>
        <!-- 配置rootlogger -->
        <Root level="trace">
            <!-- 引用Appender -->
            <AppenderRef ref="consoleAppender"/>
        </Root>
    </Loggers>
</Configuration>
  • <Configuration status=“debug” monitorInterval=“数值”>
  • monitorInterval=“5” 自动加载配置文件的间隔时间,不低于5秒

继续执行前一个测试方法,输出结果如下:

2022-09-22 18:40:46.261 [FATAL] LogTest test 9 main fatal信息
2022-09-22 18:40:46.268 [ERROR] LogTest test 10 main error信息
2022-09-22 18:40:46.268 [WARN ] LogTest test 11 main warn信息
2022-09-22 18:40:46.268 [INFO ] LogTest test 12 main info信息
2022-09-22 18:40:46.268 [DEBUG] LogTest test 13 main debug信息
2022-09-22 18:40:46.269 [TRACE] LogTest test 14 main trace信息


Process finished with exit code 0

slf4j + log4j2

当前市场上最强大的,最主流的日志搭配方式: slf4j + log4j2

依赖

        <!-- slf4j日志门面 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!-- log4j适配器 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.12.1</version>
        </dependency>

        <!-- log4j2日志门面 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.12.1</version>
        </dependency>
        <!-- log4j2日志实现 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.12.1</version>
        </dependency>

简单配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!--配置全局通用属性-->
    <properties>
        <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c %M %L %thread %m%n"/>
    </properties>

    <!-- 配置appender -->
    <Appenders>
        <!-- 配置控制台输出 -->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}"/>
        </Console>
    </Appenders>
    <!-- 配置logger -->
    <Loggers>
        <!-- 配置rootlogger -->
        <Root level="trace">
            <!-- 引用Appender -->
            <AppenderRef ref="consoleAppender"/>
        </Root>
    </Loggers>
</Configuration>

导包测试

import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class LogTest {
    @Test
    public void test(){
        Logger logger = LoggerFactory.getLogger(LogTest.class);
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");
    }
}

注意导包已经不是log4j2中的Logger,使用的是用slf4j的Logger

org.slf4j.Logger

输出结果如下

2022-09-22 18:47:18.048 [ERROR] LogTest test 10 main error信息
2022-09-22 18:47:18.051 [WARN ] LogTest test 11 main warn信息
2022-09-22 18:47:18.051 [INFO ] LogTest test 12 main info信息
2022-09-22 18:47:18.051 [DEBUG] LogTest test 13 main debug信息
2022-09-22 18:47:18.052 [TRACE] LogTest test 14 main trace信息


Process finished with exit code 0

日志拆分

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!--配置全局通用属性-->
    <properties>
        <property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c %M %L %thread %m%n"/>
        <!-- 配置文件的输出路径 -->
        <property name="LOG_HOME" value="E://Temp//log" />
        <property name="APP_NAME" value="log4j2-demo"/>
        <property name="VERSION" value="snapshoot"/>
    </properties>

    <!-- 配置appender -->
    <Appenders>
        <!-- 配置控制台输出 -->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}"/>
        </Console>
        <!--
            按照指定规则来拆分日志文件
            fileName:日志文件的名字
            filePattern:日志文件拆分后文件的命名规则
                  $${date:yyyy-MM-dd}:根据日期当天,创建一个文件夹
                   例如:2021-01-01这个文件夹中,记录当天的所有日志信息
                       (拆分出来的日志放在这个文件夹中)
                          2021-01-02这个文件夹中,记录当天的所有日志信息
                         (拆分出来的日志放在这个文件夹中)
          rollog-%d{yyyy-MM-dd-HH-mm}-%i.log
                        为文件命名的规则:%i表示序号,从0开始,目的是为了让每一份文件名字不会重复
        -->
        <RollingFile name="rollingFile"
                     fileName="${LOG_HOME}/${APP_NAME}/${VERSION}/rollog.log"
                     filePattern="${LOG_HOME}/${APP_NAME}/${VERSION}/$${date:yyyy-MM-dd}/rollog-%d{yyyy-MM-dd-HH-mm}-%i.log">
            <!-- 日志消息格式 -->
            <PatternLayout pattern="${pattern}"/>
            <Policies>
                <!-- 在系统启动时,触发拆分规则,产生一个日志文件 -->
                <OnStartupTriggeringPolicy/>
                <!-- 按照文件的大小进行拆分 -->
                <SizeBasedTriggeringPolicy size="10KB"/>
                <!-- 按照时间节点进行拆分 拆分规则就是filePattern-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!-- 在同一目录下,文件的个数限制,如果超出了设置的数值,则根据时间进行覆盖,新的覆盖旧的规则-->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>
    <!-- 配置logger -->
    <Loggers>
        <!-- 配置rootlogger -->
        <Root level="trace">
            <!-- 引用Appender -->
            <AppenderRef ref="rollingFile"/>
            <AppenderRef ref="consoleAppender"/>
        </Root>
    </Loggers>
</Configuration>

文件输出:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值