所有分类
  • 所有分类
  • 未分类

SpringBoot-整合logback的方法

简介

说明

logback是很好的一款日志框架,之前已经介绍过,见:Java日志-logback-介绍与配置 – 自学精灵

本文详细说明logback与SpringBoot如何整合。本文以最方便的整合方式进行实战,而且控制台的输出也是彩色的。

其他网址

SpringBoot-application.yml的日志配置 – 自学精灵

SpringBoot-logback的xml配置文件-用法/示例 – 自学精灵

依赖关系

SpringBoot默认集成了logback,因此无需专门引入便可进行直接使用。其包的依赖关系如下:

配置文件

根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:

Logback:logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j:log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
Log4j2:log4j2-spring.xml, log4j2.xml
JDK (Java Util Logging):logging.properties

关于颜色

本文的所有配置在Idea执行都是彩色的,跟原来的输出颜色和格式是一样的。

博主也看过一些没有彩色输出的配置,没有彩色的输出就像看黑白两色的电影一样,真的绝绝子!😂

实际上,完全可以配置成显示颜色的那个输出样式的,可以见本文的最后“多彩输出”。实例

注意

max-size设置的不要太小了,一般要大于10MB。如果设置太小,比如:100B,会导致子文件大小差别很大,而且太小了也没必要分文件了。

公共代码

 测试代码

package com.example.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RestController
public class HelloController {

    @GetMapping("/test1")
    public void test1() {
        while (true) {
            log.info("进入到死循环");
        }
    }
}

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo_SpringBoot_logback</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo_SpringBoot_logback</name>
    <description>demo_SpringBoot_logback</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

方案1:application.yml(最简)

application.yml

spring:
  application:
    name: demo

logging:
  file:
    # 如果写:demo.log,则会在jar包同路径下生成此日志文件。
    name: D:/logs/${spring.application.name}/${spring.application.name}.log
  level:
    root: info

测试结果

启动(只会生成demo.log)

Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)

 访问http://localhost:8080/test1

 确实生成了很多这种格式的文件:${LOG_PATH}/%d{yyyy-MM-dd}.%i.gz

解压(每个文本文件都是11.8MB左右)

查看其内容 (可得:demo.log若大小超过设定的值,会将这个大小的老数据切分出去,demo.log总是最新的,且大小永不会超过某个默认的值)

方案2:application.yml(日期+大小)

简介

优点

  1. 使用简单。
  2. 基本满足项目需求。

缺点

不能进行更详细的配置,比如:

  1. 不能配置将不同的级别的日志输出到不同文件

application.yml

spring:
  application:
    name: demo

logging:
  file:
    # 如果写:demo.log,则会在jar包同路径下生成此日志文件。
    name: D:/logs/${spring.application.name}/${spring.application.name}.log
    max-size: 20MB
  level:
    root: info
  pattern:
    rolling-file-name: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.log

测试结果

 启动(只会生成demo.log)

Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)

 访问http://localhost:8080/test1

 确实生成了很多这种格式的文件:${LOG_PATH}/%d{yyyy-MM-dd}.%i.log,每个文件大小都是20M左右

查看其内容 (可得:demo.log若大小超过设定的值,会将这个大小的老数据切分出去,demo.log总是最新的,且大小永不会超过设定的值)

方案3:application.yml+xml(日期+大小)

application.yml

spring:
  application:
    name: demo

logging:
  file:
    path: logs

logback-spring.xml

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

    <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!--<include resource="org/springframework/boot/logging/logback/file-appender.xml" />-->

    <springProperty scope="context" name="appName" source="spring.application.name"/>

    <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<prudent>true</prudent>-->
        <file>${LOG_PATH}/${appName}.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>
                ${LOG_PATH}/%d{yyyy-MM-dd}.%i.log
            </fileNamePattern>
            <maxFileSize>20MB</maxFileSize>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="logFile"/>
    </root>
</configuration>

测试结果

 启动(只会生成demo.log)

Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)

 访问http://localhost:8080/test1

 确实生成了很多这种格式的文件:${LOG_PATH}/%d{yyyy-MM-dd}.%i.log

到文件浏览器下看:(每个文件大小都是20M左右) 

方案4:application.yml+xml(只日期)(不推荐)

application.yml

spring:
  application:
    name: demo

logging:
  file:
    path: D:/logs

logback-spring.xml

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

    <!--<include resource="org/springframework/boot/logging/logback/base.xml"/>-->

    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!--<include resource="org/springframework/boot/logging/logback/file-appender.xml" />-->

    <springProperty scope="context" name="appName" source="spring.application.name"/>

    <appender name="logFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--<prudent>true</prudent>-->
        <!--<file>${LOG_PATH}/${appName}.log</file>-->
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${LOG_PATH}/${appName}/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log
            </FileNamePattern>
        </rollingPolicy>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="logFile"/>
    </root>
</configuration>

测试结果

启动(只会生成${LOG_PATH}/${appName}/%d{yyyy-MM-dd}/%d{yyyy-MM-dd}.log)

Idea的打印都是彩色的(后边有请求进来,它也是彩色的打印)

访问http://localhost:8080/test1

会一直往这天对应的文件里边写日志,不管大小

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录