3.SpringBoot整合slf4j等日志框架

一、常用日志框架介绍
1.1 应用中引入框架的必要性

在日常应用开发中,经常会进行日志的记录,如果仅仅使用 System.out.println();进行日志的打印输出,弊端是尤其明显的。

​ 1.无法指定日志输出的地址,不利于日志的查看;

​ 2.在服务器上部署应用时,则无法实时查看应用的运行情况等

引入日志框架主要目的就是为了更好的进行日志的管理,也便于在应用的正常运行过程中更好地监测运行情况等

1.2 常用的日志框架

Log4j :Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件

​ 基金会的一个项目。 Log4j是几种Java日志框架之一。

Log4j 2 :Apache Log4j 2是apache开发的一款Log4j的升级产品。

Commons Logging :Apache基金会所属的项目,是一套Java日志接口,之前叫Jakarta Commons

​ Logging,后更名为Commons Logging。

Slf4j :类似于Commons Logging,是一套简易Java日志门面,本身并无日志的实现。(Simple Logging

​ Facade for Java,缩写Slf4j)。

Logback: 一套日志组件的实现(Slf4j阵营)。

因为 slf4j 的优势与便捷,在日常的项目开发中,也使用最广。

二、SpringBoot整合slf4j

​ 在构建了springboot工程项目后,如果在项目中已经引入了lombok依赖,则无需再引入额外的依赖

​ (**注:**如果对构建springboot工程项目有疑问的话,可以查看此专栏下的第一篇 – springboot项目的构建)

2.1 项目中已经引入lombok

此时,则只需要在需要打印日志的java类上加 @Slf4j 注解,便可开启

使用 log.info()、log.warn()、log.error()等根据不同的日志级别进行日志的打印输出

在这里插入图片描述

log.info("入参为: {} ",textMessage);
2.2 项目中未引入lombok

此时,则需要引入slf4j的依赖

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
</dependency>

在需要进行日志输出的类中创建出日志对象

@RestController
public class HelloWorld {
    @Autowired
    private HelloService helloService;
	
    //在getLogger方法中传入该类的class对象
    private final static Logger log = LoggerFactory.getLogger(HelloWorld.class);

    @GetMapping("/hello")
    public String sayHello(){
        //根据不同的日志级别进行日志输出
        log.info("hello world!")
        return helloService.sayHello();
    }

}
三、日志的输出管理

在项目中为了更好的进行日志管理、查看等,我们需要将日志输出到指定位置的文件中,此时,需要在项目中进

行相关的配置。

在resources目录下创建名为 logback.xml文件

<configuration scan="false" scanPeriod="60 seconds" debug="true">
    <!--日志文件主目录:这里是当前目录下的logs目录下-->
    <property name="LOG_HOME" value="./logs/"/>
    <property name="maxHistory" value="30"/>
    <property name="LOG_PATTERN" value="%d{HH:mm:ss:SSS}[%-5p] 				[%X{event}|%X{id}|%X{number}] %m %n"/>

    <contextName>spring.application.name</contextName>

    <!--设置日志输出为文件 根据日志级别进行不同级别日志文件的输出-->
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}info.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}info.log.%d{yyyy-MM-dd}</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <immediateFlush>true</immediateFlush>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
    </appender>
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}error.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件路径:这里%d{yyyyMMdd}表示按天分类日志-->
            <fileNamePattern>${LOG_HOME}error.log.%d{yyyy-MM-dd}</fileNamePattern>
            <maxHistory>${maxHistory}</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
            <immediateFlush>true</immediateFlush>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
    </appender>

    <root level="DEBUG">
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>
    
    <!-- 多环境配置 按照active profile选择分支 -->
    <springProfile name="dev">
        <!--root节点 全局日志级别,用来指定最基础的日志输出级别 我本地测试,只记录error级别日志-->
        <root level="info">
            <appender-ref ref="FILE"/>
            <appender-ref ref="CONSOLE"/>
        </root>

       <!--  子节点向上级传递 局部日志级别
        <logger level="WARN" name="org.springframework"/>
        <logger level="WARN" name="com.netflix"/>
        <logger level="DEBUG" name="org.hibernate.SQL"/>-->
    </springProfile>
    <springProfile name="test">
        <!--root节点 全局日志级别,用来指定最基础的日志输出级别 我本地测试,只记录error级别日志-->
        <root level="info">
            <appender-ref ref="FILE"/>
            <appender-ref ref="CONSOLE"/>
        </root>

        <!--  子节点向上级传递 局部日志级别
         <logger level="WARN" name="org.springframework"/>
         <logger level="WARN" name="com.netflix"/>
         <logger level="DEBUG" name="org.hibernate.SQL"/>-->
    </springProfile>
    <springProfile name="prod">

    </springProfile>
</configuration>
  • 1
    点赞
  • 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、付费专栏及课程。

余额充值