20Springboot整合日志过程

       

目录

1、日志级别介绍

2、SpringBoot默认SLF4J+Logback组合案例

3、SpringBoot的log4j2的桥接器案例

4、核心文件配置日志信息

5、springboot集成logback.xml(推荐)

 6、springboot集成log4j2.xml(推荐)


      SpringBoot是现今市场上最火爆用来简化 spring 开发的框架,springboot日志也是开发中常用的日志系统。

      下面看springboot的依赖图,

       从图中可以看出SpringBoot默认就是使用SLF4J作为日志门面,Logback作为日志实现来记录日志,默认基本是info级别。并且默认集成了桥接器jul-to-slf4j、桥接器log4jto-slf4j(log4j2桥接器
        我们分别从以下几点讲解:

  • SpringBoot默认的 SLF4J+Logback方式
  • SpringBoot默认的log4j2的桥接器方式
  • SpringBoot通过application.properties配置自定义
  • SpringBoot整合logback.xml
  • SpringBoot整合log4j.xml 其中logback.xml和log4j.xml方式常用。

1、日志级别介绍

    日志级别从高到低:error,warn,info,debug、trace
    error:抛出异常或者连接不上数据库等,需要人为接入和修复的
    warn:不常用,只是警告
    info:在未来进行定位和排查问题使用,例如用户请求和返回
    debug:用于自身在开发过程中调试使用,例如打印某方法执行的时间,这些信息不需要以info级别记录。
    trace;一般用于框架开发,不常用。

2、SpringBoot默认SLF4J+Logback组合案例

001、使用springboot初始化工具创建项目如下图:

002、创建测试类,并运行查看结果,如下图:

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
    // logback 日志的5种级别的输出方式
    // 从低到高依次是 trace < debug < info < warn < error
    Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
    @Test
    public void springbootLogTest() {
        logger.error("error 错误信息,不会影响系统运行");
        logger.warn("warn 警告信息,可能会发生问题");
        logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
        logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
        logger.trace("trace 追踪信息,记录程序所有的流程信息");
    }

}

      通过打印的日志我们发现,springboot 默认配置好日志类,并且日志输出风格是logback日志格式。如果要修改日志相关配置,则需要在application.properties文件中修改配置。

3、SpringBoot的log4j2的桥接器案例

001、springboot默认集成log4j2的桥接器,依赖不作任何改动,只修改代码的Logger即可。创建测试类,如下图:

package com.hwadee.springboot.log;

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

@SpringBootTest
class SpringbootLogApplicationTests {
    // logback 日志的5种级别的输出方式
    // 从低到高依次是 trace < debug < info < warn < error
//    Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
    Logger logger = LogManager.getLogger(SpringbootLogApplicationTests.class);
    @Test
    public void springbootLogTest() {
        logger.error("error 错误信息,不会影响系统运行");
        logger.warn("warn 警告信息,可能会发生问题");
        logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
        logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
        logger.trace("trace 追踪信息,记录程序所有的流程信息");
    }
}

003、运行测试类查看结果,如下图

4、核心文件配置日志信息

001、在resources的application.propertieszhogn 自定义日志配置信息,如下:

logging.level.com.hwadee.springboot.log=trace
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss.sss} %c %M %L %thread %m%n"
logging.file.path=D:/Workspace/cqyddx/springboot_log
logging.file.name=D:/Workspace/cqyddx/springboot.log

注意:logging.file.path=D:/Workspace/cqyddx/springboot_log
将日志输出到文件中,使用logging.file.path来配置文件路径下的文件夹〈logging.file直接配置文件的形式已经过时,不使用),如果不设置logging.file.name,则日志文件生成的名字默认为spring.log。

002、创建测试类,并运行查看结果,如下图:

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
    // logback 日志的5种级别的输出方式
    // 从低到高依次是 trace < debug < info < warn < error
    Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
    @Test
    public void springbootLogTest() {
        logger.error("error 错误信息,不会影响系统运行");
        logger.warn("warn 警告信息,可能会发生问题");
        logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
        logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
        logger.trace("trace 追踪信息,记录程序所有的流程信息");
    }

}

003、运行结果如下:

5、springboot集成logback.xml(推荐)

logback日志详解参考 Java的常用日志技术详解(二)

001、在resources下创建logback.xml,配置如下:

<?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 name="logDir" value="./logs"/>
    <!--  配置控制台 appender  -->
    <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="fileAppender" class="ch.qos.logback.core.FileAppender">
        <!--  引入文件位置  -->
        <file>${logDir}/logback.log</file>
        <!--  配置日志输出格式  -->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--  引用 输出格式的 通用配置属性  -->
            <pattern>${pattern}</pattern>
        </encoder>
    </appender>

    <!--  配置日志记录器  -->
    <root level="info">
        <!--  引入appender  -->
        <appender-ref ref="consoleAppender"></appender-ref>
        <appender-ref ref="fileAppender"></appender-ref>
    </root>
</configuration>

002、创建测试类,如下:

import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootLogApplicationTests {
    // logback 日志的5种级别的输出方式
    // 从低到高依次是 trace < debug < info < warn < error
    Logger logger = LoggerFactory.getLogger(SpringbootLogApplicationTests.class);
    @Test
    public void springbootLogTest() {
        logger.error("error 错误信息,不会影响系统运行");
        logger.warn("warn 警告信息,可能会发生问题");
        logger.info("info 运行信息,数据连接、网络连接、I0操作等等");
        logger.debug("debug 调试信息,一般在开发中使用,记录程序变量参数传递信息等等");
        logger.trace("trace 追踪信息,记录程序所有的流程信息");
    }

}

003、测试结果:

 6、springboot集成log4j2.xml(推荐)

日志log4j2.xml详解参考 Java的常用日志技术详解(三)

001、引入log4j2依赖
    引入log4j2依赖,无需指定版本,因为会根据parent版本自动查找。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

002、排除logback冲突

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-web</artifactId>
     <exclusions>
          <exclusion>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-logging</artifactId>
          </exclusion>
     </exclusions>
</dependency>

003、编写Log4j2的配置文件Log4j2.xml

位置在resources目录下

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="fatal">
   <!--配置log日志文件路径 -->
   <Properties>
        <!--配置mac或者linux环境下日志文件路径 -->
        <!--        <Property name="baseDir" value="${sys:user.home}/logs"/>-->

        <!--配置windows环境下日志文件路径 -->
        <Property name="baseDir" value="D:\Workspace\shoppingproject\shoppingProject\src\main\resources\logs"/>
    </Properties>

  <Appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
      <ThresholdFilter level="info" onMatch="ACCEPT"
        onMismatch="DENY"/>
      <PatternLayout
        pattern="[%d{MM:dd HH:mm:ss.SSS}] [%level] [%logger{36}] - %msg%n"/>
    </Console>

    <!--debug级别日志文件输出-->
    <RollingFile name="debug_appender" fileName="${baseDir}/debug.log"
      filePattern="${baseDir}/debug_%i.log.%d{yyyy-MM-dd}">
      <!-- 过滤器 -->
      <Filters>
        <!-- 限制日志级别在debug及以上在info以下 -->
        <ThresholdFilter level="debug"/>
        <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
      <!-- 日志格式 -->
      <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
      <!-- 策略 -->
      <Policies>
        <!-- 每隔一天转存 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <!-- 文件大小 -->
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingFile>

    <!-- info级别日志文件输出 -->
    <RollingFile name="info_appender" fileName="${baseDir}/info.log"
      filePattern="${baseDir}/info_%i.log.%d{yyyy-MM-dd}">
      <!-- 过滤器 -->
      <Filters>
        <!-- 限制日志级别在info及以上在error以下 -->
        <ThresholdFilter level="info"/>
        <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
      </Filters>
      <!-- 日志格式 -->
      <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
      <!-- 策略 -->
      <Policies>
        <!-- 每隔一天转存 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <!-- 文件大小 -->
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingFile>

    <!-- error级别日志文件输出 -->
    <RollingFile name="error_appender" fileName="${baseDir}/error.log"
      filePattern="${baseDir}/error_%i.log.%d{yyyy-MM-dd}">
      <!-- 过滤器 -->
      <Filters>
        <!-- 限制日志级别在error及以上 -->
        <ThresholdFilter level="error"/>
      </Filters>
      <!-- 日志格式 -->
      <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
      <Policies>
        <!-- 每隔一天转存 -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
        <!-- 文件大小 -->
        <SizeBasedTriggeringPolicy size="100 MB"/>
      </Policies>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="debug">
      <AppenderRef ref="Console"/>
      <AppenderRef ref="debug_appender"/>
      <AppenderRef ref="info_appender"/>
      <AppenderRef ref="error_appender"/>
    </Root>

  </Loggers>
</Configuration>

5、查看日志目录

总结:我们虽然分别对SpringBoot默认的 SLF4J+Logback方式、SpringBoot默认的log4j2的桥接器方式、SpringBoot通过application.properties配置自定义方式、SpringBoot整合logback.xml方式、
SpringBoot整合log4j.xml方式讲解,但实际开发中经常使用logback.xml和log4j.xml方式。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些关于Spring Boot整合Log4j2的指导。 首先,您需要在Spring Boot项目的pom.xml文件中添加Log4j2相关依赖。以下是一个示例: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> </dependencies> ``` 接下来,您需要在项目中创建log4j2.xml文件。以下是一个示例: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="console"/> </Root> </Loggers> </Configuration> ``` 在这个示例中,我们定义了一个名为“console”的Appender,用于将日志输出到控制台。我们还定义了一个名为“Root”的Logger,用于将所有日志消息发送到“console”Appender,并将日志级别设置为“info”。 最后,在项目中使用Log4j2日志记录。您可以使用Spring的内置日志记录注解@Log4j2来注释您的类。以下是一个示例: ```java import lombok.extern.log4j.Log4j2; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller @Log4j2 public class HomeController { @GetMapping("/") public String home() { log.info("Home page accessed"); return "home"; } } ``` 这个示例中,我们使用了Lombok提供的@Log4j2注解来注释HomeController类。然后,我们在home()方法中使用log.info()方法来记录日志消息。 希望这些指导对您有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值