日志系统(6) : SpringBoot日志实现、Logback切换为Log4j2

本文详细介绍了SpringBoot中日志的实现,从入门案例展示了如何配置日志级别和输出格式,到日志文件的生成和拆分。接着,讨论了如何将默认的logback替换为log4j2,包括排除logback依赖、添加log4j2依赖以及配置log4j2.xml文件。整个过程涵盖了日志配置的各个方面,对于理解SpringBoot日志管理和性能优化具有指导意义。
摘要由CSDN通过智能技术生成

SpringBoot日志实现

  • SpringBoot是现今市场上最火爆用来简化spring开发的框架,springboot日志也是开发中常用的日志系统。
  • SpringBoot 默认就是使用SLF4J作为日志门面,Logback作为日志实现来记录日志。

入门案例

// application.properties文件

logging.level.com.guizy=trace
logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n

logging.file.path=/Users/guizhaoyang/Desktop/springboot_log
package com.guizy.springboot_log;

import org.apache.logging.log4j.LogManager;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringBootLogApplicationTests {

    @Test
    public void test01() {
        /*
            入门案例
                SpringBoot日志具体实现
                级别测试
                默认是info级别;
                logback的风格输出, (Springboot默认采用的是slf4j+logback作为日志实现)
         */
        Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");
    }

    @Test
    public void test02() {
        /*
            在spring-boot-starter-web依赖图中,观察到除了logback实现,还依赖了jul,log4j2等日志实现的桥接器
            使用log4j2的日志实现, 观察桥接器是否起作用
            通过观察日志信息,发现扔使用的是slf4j+logback来实现的;说明桥接器起了作用;通过log4j+桥接器来实现了slf4j+logback的方式
         */
        org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringBootLogApplicationTests.class);
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");
    }

    @Test
    public void test03() {
        /*
            application.properties(yml)是springboot的核心配置文件(用来简化开发使用)
            我们也可以通过该配置文件,修改日志相关的配置
            在springboot核心配置文件中配置:
                logging.level.com.guizy=trace
                logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n
         */
        Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");

        // 2022-03-31 [ERROR] -error信息
        // 2022-03-31 [WARN] -warn信息
        // 2022-03-31 [INFO] -info信息
        // 2022-03-31 [DEBUG] -debug信息
        // 2022-03-31 [TRACE] -trace信息
    }

    @Test
    public void test04() {

        /*
        将日志输出到文件中
            使用logging.file.path来配置文件路径下的文件夹(logging.file直接配置文件的形式已经过时,不使用)
            在配置的文件夹下,日志文件生成的名字为spring.log

            logging.level.com.guizy=trace
            logging.pattern.console=%d{yyyy-MM-dd} [%level] -%m%n

            // 文件夹为:springboot_log,文件名字为spring.log
            logging.file.path=/Users/guizhaoyang/Desktop/springboot_log
         */
        Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");
    }
}

Springboot使用日志拆分等功能

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"></property>

    <!-- 配置文件的输出的路径-->
    <property name="logDir" value="/Users/guizhaoyang/Desktop"></property>

    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">

        <target>
            System.err
        </target>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">

            <pattern>${pattern}</pattern>

        </encoder>

    </appender>


    <!-- 配置文件的appender 可拆分归档的文件 -->
    <appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <!-- 输入格式 -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <!-- 引入文件位置 -->
        <file>${logDir}/roll_logback.log</file>

        <!-- 指定拆分规则 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

            <!-- 按照时间和压缩格式声明文件名 压缩格式gz -->
            <fileNamePattern>${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>

            <!-- 按照文件大小来进行拆分 -->
            <maxFileSize>1KB</maxFileSize>

        </rollingPolicy>

    </appender>

    <logger name="com.guizy" level="info" additivity="false">

        <appender-ref ref="roll"/>
<!--        <appender-ref ref="consoleAppender"/>-->

    </logger>

</configuration>
@Test
public void test05() {

    /*
        如果是需要配置日志拆分等相对高级的功能
        那么application.properties就达不到需求了
        需要使用日志实现相应的配置文件

        例如我们现在使用的是logback日志实现
        那么就需要在类路径resources下,配置logback.xml

     */

    Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);

    for (int i = 0; i < 2000; i++) {
        logger.error("error信息");
        logger.warn("warn信息");
        logger.info("info信息");
        logger.debug("debug信息");
        logger.trace("trace信息");

    }
}

如何将springboot中logback替换为log4j2

由于log4j2性能的强大
当今市场上越来越多的项目选择使用slf4j+log4j2的组合
springboot默认使用的是slf4j+logback的组合

  • 我们可以将默认的logback替换成为log4j2
    • 1.启动器依赖,间接的依赖logback
      • 所以需要将之前的环境中,logback的依赖去除掉
    • 2.添加log4j2依赖
    • 3.将log4j2的配置文件log4j2.xml导入到类路径resources下面
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除掉logback的依赖-->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- 添加log4j2依赖-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

添加log4j依赖

<?xml version="1.0" encoding="utf-8" ?>
<!--<Configuration status="debug">--> <!-- 可以详细打印出系统的日志 -->
<Configuration>

    <!-- 配置appender,appenders中可以配置多个appender-->
    <Appenders>
        <!-- 控制台appender  -->
        <Console name="consoleAppender" target="SYSTEM_OUT">

        </Console>

    </Appenders>

    <Loggers>
        <!-- 配置root logger -->
        <Root level="trace">
            <AppenderRef ref="consoleAppender"/>
        </Root>
    </Loggers>
</Configuration>
@Test
public void test06() {
     Logger logger = LoggerFactory.getLogger(SpringBootLogApplicationTests.class);
     logger.error("error信息");
     logger.warn("warn信息");
     logger.info("info信息");
     logger.debug("debug信息");
     logger.trace("trace信息");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

white camel

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值