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()等根据不同的日志级别进行日志的打印输出

3.SpringBoot整合slf4j等日志框架_第1张图片

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

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

<dependency>
    <groupId>ch.qos.logbackgroupId>
    <artifactId>logback-classicartifactId>
dependency>
<dependency>
    <groupId>org.slf4jgroupId>
    <artifactId>jcl-over-slf4jartifactId>
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">
    
    <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.namecontextName>

    
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}info.logfile>
        <append>trueappend>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}info.log.%d{yyyy-MM-dd}fileNamePattern>
            <maxHistory>${maxHistory}maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}pattern>
            <immediateFlush>trueimmediateFlush>
        encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFOlevel>
        filter>
    appender>
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}error.logfile>
        <append>trueappend>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}error.log.%d{yyyy-MM-dd}fileNamePattern>
            <maxHistory>${maxHistory}maxHistory>
            <totalSizeCap>1GBtotalSizeCap>
        rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}pattern>
            <immediateFlush>trueimmediateFlush>
        encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERRORlevel>
        filter>
    appender>

    <root level="DEBUG">
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    root>
    
    
    <springProfile name="dev">
        
        <root level="info">
            <appender-ref ref="FILE"/>
            <appender-ref ref="CONSOLE"/>
        root>

       
    springProfile>
    <springProfile name="test">
        
        <root level="info">
            <appender-ref ref="FILE"/>
            <appender-ref ref="CONSOLE"/>
        root>

        
    springProfile>
    <springProfile name="prod">

    springProfile>
configuration>

你可能感兴趣的:(SpringBoot,slf4j,spring,boot)