美文网首页
springboot-logback 实战(项目中极简应用)

springboot-logback 实战(项目中极简应用)

作者: nicohuhu | 来源:发表于2021-07-16 16:35 被阅读0次

之前整合过logback,但是看起来花里胡哨,中看不中用,也没有详细介绍,今天来理一下实际项目中快速应用,根据实际场景解决问题。

第一步:创建一个极简的springboot项目

yml只需把端口配置好能够启动就行

server:
  port: 8080

pom文件加入基本依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

由于springboot的spring-boot-starter帮我们自动集成了spring-boot-starter-logging的依赖,再额外加上lombok依赖,我们就可以直接使用注解@Slf4j来打日志了

@Slf4j
@SpringBootApplication
public class Main {

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
        log.info("我可以快乐的打日志了");
    }
}

当然我们做api开发一般注解都加到controller类上面,到现在我们简单的操作就把日志输出到控制台了,虽然没有配置日志的格式控制台也按照一定的格式输出了,这是因为当前启用的是logback的默认设置,那么默认设置都有哪些?首先直接启动项目后控制台只输出info级别的日志,默认设置不会把日志输出到日志文件等等,如果我们想要自定义那么先从简单的配置开始。

第二步:yml极简配置日志属性
logging:
  level:
    root: info
    com:
      baidu:
        test:
          mapper: debug
  file:
    name: ./log/business_Log/bsiness.log
    max-history: 1
    max-size: 10MB
    clean-history-on-start: true
    total-size-cap: 10240
    path:
  pattern:
    rolling-file-name:
    dateformat:
    level:
    file:
    console:

我们看到logging节点下的几个常用属性,level、file、pattern,还有其他属性有时间可以继续深入研究,可以在yml里借助IDE来查看具体属性。


image.png
这里从level开始。
image.png

1.root 可以设置日志的几个打印级别,如果设置为info那就打印info级别以上的,像debug就不打印了,日志打印优先级可以自行百度。root可以全局控制输出,包括控制台输出和文件输出,当前设置为info那么就打印info级别以上的。

2.包名com.baidu.test.mapper 可以指定某个包的日志级别,当前为debug,那么会将该包下的日志都已debug级别以上的全部输出。

接着file 我们可以看到对应属性的默认值
image.png

1.path 可以填写日志输出文件路径./log/business_Log,表示当前项目根路径下business_Log文件夹,也可以不用配置,直接配置指定路径的name属性。
2.name 可以直接配置路径加文件名./log/business_Log/bsiness.log,一步到位不用配置path,当该路径不存在时,系统会默认创建。
3.max-history 默认设置的是7,也就是只保存最近7天的日志文件,那么超出7天是否清除掉日志文件,取决于clean-history-on-start: true这个属性(因为时间原因我没有验证),默认设置是false,设置为true时超过7天自动清除才会自动清除(可以自己试验一下,设置为1天,然后把项目启动起来,隔天看看是否只保留一天的日志)
4.max-size 系统默认是按照日期切割日志的,也就是每天会切割一个日志文件然后打包备份到指定路径的文件夹,那么此处max-size是按照文件大小10M来切割的,超过10m就会将文件打包重新生成一个日志文件继续写入。
5.total-size-cap 这个属性可以计算统计输出文件的总大小,可以约束文件占用磁盘到一定容量,比如15M,超过限定的容量15M,会自动清除较早的日志文件,让日志时钟占用15M左右的空间。默认值是0B。主要用来避免大量日志文件把服务器磁盘资源撑爆。

接着pattern
image.png

1.level 可以配置打印日志显示的level 的样式
2.file 输出到日志文件的日志样式
3.dateformat 日期格式
4.rolling-file-name 可以设置日志文件切割后备份的文件名格式,但是这个属性必须把file.path的路径./log/business_Log配置好,这样切割后的文件后放到该路径下,否则就放到项目根路径下了。
5.console 可以设置控制台输出的日志样式

以上通过配置yml可以实现简单自定义配置,更多的个性化配置貌似支持不够,比如控制台打印彩色日志,配置多个appender,官方文档中给出的属性也比较有限(以下图片不清楚能否通过配置简单配置yml就能实现),所以需要通过配置文件来解决。
image.png
第三步:自定义配置logback-spring.xml

上一篇整合logback比较复杂,这次只需简单配置

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

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>logback</contextName>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="log.path" value="./log/business_Log" />



    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <withJansi>true</withJansi>
        <encoder>
            <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
            <!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消息    %n:是换行符-->
            <pattern>%red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <file>${log.path}/logback.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback-%d{yyyy-MM-dd-HH-mm}.log</fileNamePattern>
            <maxHistory>365</maxHistory>
<!--            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">-->
<!--                <maxFileSize>100kB</maxFileSize>-->
<!--            </timeBasedFileNamingAndTriggeringPolicy>-->
        </rollingPolicy>
        <encoder>
            <!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消息    %n:是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--    如果appender里没有限定日志级别,那么root可以统一设置,如果没有配置那么控制台和文件不会输出任何日志,这里root的levvel不做限制-->
    <root >
        <!--        允许控制台输出-->
        <appender-ref ref="console" />
        <!--        允许文件输出-->
        <appender-ref ref="file" />
    </root>

</configuration>

执行的效果是,每分钟切割一下日志


image.png

控制台输出彩色日志


image.png

更多配置可以参考上一篇,当前项目这样配置已经能满足需求了,我不需要把日志按级别分类,日志量比较大的时候可以一个小时切割一次,小的话一天切割一次,之前项目按照100M来切割,当从服务器下载日志时100M还是很耗时的,所以用时间来切割比较符合我当前场景,这样每个文件20M左右。

如果还是觉得有点大那么可以压缩,修改以下配置

       <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log.path}/logback-%d{yyyy-MM-dd-HH-mm}.%i.log.zip</fileNamePattern>
            <maxHistory>365</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--文件达到 最大128MB时会被压缩和切割 -->
                <maxFileSize>10kB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

当前设置为每分钟切割日志文件,如果当前文件超过10kB那么就切割成压缩包用序号编号,到下一分钟又从0开始编号,以下是压缩效果


image.png

相关文章

网友评论

      本文标题:springboot-logback 实战(项目中极简应用)

      本文链接:https://www.haomeiwen.com/subject/jpzvpltx.html