IDEA08:Springboot统一Slf4j日志

写在前面

Springboot默认使用Slf4j和Logback进行日志操作。Slf4j是日志门面,可以看作是日志框架的统一接口;Logback是日志实现,是日志框架的内核。这里介绍如何在Springboot中配置和使用Slf4j和Logback。

一、依赖包配置

  • slf4j-api在很多包里面都会有,因此会彼此冲突,如果不解决冲突的话后面的Logback配置可能会失效;
  • 解决依赖冲突可以参考博文:如何解决Maven依赖冲突,在IDEA中下载Maven Helper插件可以轻松查看已安装依赖之间的冲突并排除;
  • 由于是在Springboot框架中,所以除了spring-boot-starter-web依赖外的slf4j-api均要排除,也不需要引入完整的slf4j-api依赖,参考博文:Springboot 系列(四)Spring Boot 日志框架
  • lombok是注解工具,引入之后可以使用@Slf4j来注解日志对象;
<dependencies>
        <!--1.logger dependency-->
<!--        &lt;!&ndash; https://mvnrepository.com/artifact/org.slf4j/slf4j-api &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>org.slf4j</groupId>-->
<!--            <artifactId>slf4j-api</artifactId>-->
<!--            <version>2.0.0-alpha5</version>-->
<!--        </dependency>-->
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>2.0.0-alpha5</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>provided</scope>
        </dependency>

        <!--2.spring boot dependency-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

二、配置Logback

  • 在resources文件夹中增加logback-spring.xml文件;
    增加配置文件

  • logback-spring.xml文件中可以很方便地配置日志的输出位置、格式、输出级别等内容;

  • 关于配置文件各个标签的含义和参数,可以参考博文:springboot @Slf4j+logback 配置详解

  • appender的配置控制了日志的输出位置;

  • appender官方文档在:https://logback.qos.ch/manual/appenders.html

  • SizeAndTimeBasedRollingPolicy设置了滚动日志文件输出,当FileNamePattern中的时间标志位不一致时,会自动创建用新时间标志位命名的日志文件(也就是%d{yyyy-MM});当日志文件达到maxFileSize后,会自动在日志文件后改序号创建新的日志文件(也就是%i)。

  • pattern主要是通过字符串来定义的,一些符号含义如下,参考博文:日志组件slf4j介绍及配置详解

符号含义

  • AsyncAppender用来包装FileAppender,实现日志的异步输出,提高日志输出的性能;

  • root定义了所有文件的日志输出级别;

  • 如果需要差异化定义某个包或者类的日志输出级别,可以用logger来定义,但要使用additivity="false",否则日志会输出两遍,参考博文:logback系列之一:输出日志到控制台

  • 一个实例的配置文件如下,主要参考博文:Java Slf4j日志配置输出到文件中

<?xml version="1.0" encoding="UTF-8"?>
<!--scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。-->
<!--scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。-->
<!--debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- contextName: 上下文名称,关联应用程序 -->
    <contextName>DISPATCHER</contextName>

    <!-- property: 相当于xml中的变量,可在下文中以${name}使用 -->
    <property name="log.path" value="./logs"/>
    <property name="server.name" value="dispatcher"/>
    <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
    <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"/>
    <property name="log.file" value="${log.path}/${server.name}_%d{yyyy-MM}_%i.log"/>

    <!-- 控制台输出 -->
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
    </appender>

    <!-- 滚动文件输出 -->
    <appender name="rollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>

        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!-- 日志文件输出的文件名 -->
            <FileNamePattern>${log.file}</FileNamePattern>
            <!-- 日志文件保留天数 -->
            <MaxHistory>0</MaxHistory>
            <!-- 日志文件最大大小 -->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>

       <ImmediateFlush>true</ImmediateFlush>
    </appender>

    <!-- 异步文件输出 -->
    <appender name="asyncFileAppender" class="ch.qos.logback.classic.AsyncAppender">
        <queueSize>5000</queueSize>
        <discardingThreshold>0</discardingThreshold>
        <includeCallerData>false</includeCallerData>
        <appender-ref ref="rollingFileAppender"/>
    </appender>

    <!-- logger: 某个包或者类的日志打印级别 -->
    <!-- 不指定appender则继承root的appender -->
    <logger name="cn.jeremy" level="DEBUG" additivity="false">
        <appender-ref ref="consoleAppender"/>
    </logger>

    <!-- root: 所有文件的日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="consoleAppender"/>
        <appender-ref ref="asyncFileAppender"/>
    </root>
</configuration>

三、在Springboot配置中关联Logback配置文件

  • 打开application.yml,增加以下配置:
logging:
  config: classpath:logback-spring.xml
  • 主要是让Springboot找到配置的文件;
  • 但其实不显式写在application.yml,Springboot也能找到,因为Logback配置文件的路径和命名按照了Springboot的默认存放路径,参考博文:logback RollingFileAppender使用详解

扫描配置文件顺序

四、使用Slf4j日志操作

  • 引入lombok包,不然没法用注解:
import lombok.extern.slf4j.Slf4j;
  • 在类前加注解@Slf4j
  • 使用直接用log对象即可,运行时会自动注入日志对象,如:
log.error("Load config error.");
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Boot可以很方便地整合SLF4J日志框架,只需要在pom.xml文件中添加相应的依赖即可。具体步骤如下: 1. 在pom.xml文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 2. 在application.properties文件中配置日志级别和输出格式,例如: ``` logging.level.root=INFO logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n ``` 3. 在代码中使用SLF4J进行日志输出,例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyController { private static final Logger logger = LoggerFactory.getLogger(MyController.class); public void myMethod() { logger.info("This is a log message."); } } ``` 以上就是Spring Boot整合SLF4J日志的基本步骤。 ### 回答2: SLF4J是一个在Java应用程序中使用日志的简单抽象工具,它可以帮助开发者集成不同的日志框架,如logback, log4j或java.util.logging。Spring Boot作为一种流行的Java框架,提供了丰富的工具来简化应用程序的开发,其中就包括日志记录。 在Spring Boot中,将SLF4J与其他日志框架整合非常简单。首先,我们需要在pom.xml文件中添加所需的依赖项,例如: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-simple</artifactId> <version>1.7.30</version> </dependency> </dependencies> ``` 在这个例子中,我们添加了一个简单的依赖项,该依赖项将SLF4J与默认的Simple工厂一起使用,以便在控制台上记录日志消息。 接下来,我们需要在应用程序中使用SLF4J记录日志消息。这可以通过在我们的类中添加以下代码行来完成: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class MyController { private Logger logger = LoggerFactory.getLogger(MyController.class); @GetMapping("/hello") public String sayHello() { logger.info("Hello from SLF4J"); return "Hello"; } } ``` 在这个例子中,我们首先导入了Logger和LoggerFactory类。然后,我们在我们的控制器类中添加了一个Logger实例,该实例将我们的日志记录到控制台上。最后,我们在GetMapping方法中使用该实例记录一条信息。 当我们运行我们的应用程序并访问/hello端点时,我们将在控制台上看到以下输出: ``` 2021-10-01 12:00:00.000 INFO 12345 --- [nio-8080-exec-1] com.example.demo.MyController : Hello from SLF4J ``` 这就是整合过程的简单演示。通过这个简单的例子,我们可以轻松地在Spring Boot应用程序中使用SLF4J进行日志记录。最后,使用SLF4J可以帮助我们将应用程序与日志框架进行解耦,使我们的应用程序更加灵活和可维护。 ### 回答3: Spring Boot 是一种用于创建微服务的框架,它将应用程序所需的所有配置和依赖项打包在一起,以便快速轻松地开发和部署应用程序。在 Spring Boot 中整合 SLF4J 日志系统非常简单,只需要进行以下几个步骤: 1.在 pom.xml 文件中添加所需的依赖项: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` spring-boot-starter-logging 包的作用是引入 Spring Boot 应用程序的默认日志记录器 Logback,而 slf4j-api 是 SLF4J 日志系统的 API 接口,logback-classic 则是具体的日志实现。 2.在 application.properties 文件中配置日志记录器的属性: ``` # 根日志级别 logging.level.root=INFO # 控制台的日志级别 logging.level.org.springframework.web=DEBUG # 日志文件的输出路径 logging.file=/var/log/myapplication.log ``` 在上面的例子中,我们设置根日志级别为 INFO,控制台日志级别为 DEBUG,并在 /var/log/myapplication.log 文件中输出日志。 3.在代码中使用 SLF4J 记录日志: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.debug("Doing something"); logger.info("Did something"); logger.error("Failed to do something"); } } ``` 在上面的代码中,我们使用了 SLF4J 的 getLogger() 方法来获取 MyService 类的日志记录器,然后使用 debug()、info() 和 error() 方法记录不同级别的日志。 通过上述步骤,我们就可以在 Spring Boot 应用程序中使用 SLF4J 记录日志了。值得注意的是,在开发调试时,可以将日志级别设置为 DEBUG,以便查看更详细的日志信息。而在生产环境中,应该将日志级别设置为 WARN 或 ERROR,以避免过多的日志输出。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值