SpringBoot--整合logback--使用/教程/实例

原文网址:SpringBoot--整合logback--使用/教程/实例_IT利刃出鞘的博客-CSDN博客

简介

说明

logback是很好的一款日志框架,之前已经介绍过,见:Java日志--logback--配置/介绍/基础_IT利刃出鞘的博客-CSDN博客

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

其他网址

SpringBoot--日志配置--application.yml_IT利刃出鞘的博客-CSDN博客

SpringBoot--logback的xml配置文件--用法/示例_IT利刃出鞘的博客-CSDN博客

依赖关系

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

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

 

1. 添加logback-spring.xml文件 在src/main/resources目录下创建一个名为logback-spring.xml的文件,将下面的代码复制并粘贴进去。 ``` <?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- 确定打印的日志级别 --> <timestamp key="byDay" datePattern="yyyyMMdd" /> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -%msg%n</pattern> </encoder> </appender> <!-- 输出到本地文件 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_PATH}/springboot2.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH}/springboot2.%d{yyyy-MM-dd}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} -%msg%n</pattern> </encoder> </appender> <!-- root级别日志处理器 --> <root level="info"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> <!-- 配置包日级别日志处理器 --> <logger name="com.example" level="debug" additivity="false"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </logger> </configuration> ``` 2. 配置文件参数 在application.properties或application.yml文件中添加以下参数: - logging.config:指定logback-spring.xml配置文件路径,如果不指定将使用默认的日志配置。 - logging.path:指定日志文件存放路径,必须是一个相对目录。例如:logging.path=log 相当于在项目根目录下创建了一个log文件夹,日志将输出到该文件夹中。如果没有设置该参数,则日志将输出到控制台。 ``` #以配置文件的方式加载日志框架,默认使用logback-spring.xml作为配置文件 logging.config=classpath:logback-spring.xml #指定日志存放的相对路径 logging.path=log ``` 3. 在代码中使用日志输出 在需要输出日志的类中使用注入方式加载日志,在方法中使用对应的日志级别输出日志。 ``` @Component public class TestController { private static final Logger logger = LoggerFactory.getLogger(TestController.class); @RequestMapping("/test") public String test() { logger.debug("这是一条debug日志"); logger.info("这是一条info日志"); logger.warn("这是一条warn日志"); logger.error("这是一条error日志"); return "test"; } } ``` 运行项目,打开控制台或者查看日志文件,可以看到日志已经输出成功。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT利刃出鞘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值