• springboot使用logback日志框架超详细教程


    看完必会的Logback日志框架

    现在很多项目都基于springBoot框架来进行开发,但是日志框架繁而杂乱,本文为你介绍一下Logback的日志框架详细作用,看完必会。

    首先我们要在application.xml设置开发环境,因为针对开发环境和生产环境有不同的日志策略

    在这里插入图片描述

    一、Logback日志

    1、什么是日志

    通过日志查看程序的运行过程,运行信息,异常信息等

    2、日志级别

    日志记录器(Logger)的行为是分等级的。如下表所示:

    分为:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF

    默认情况下,spring boot从控制台打印出来的日志级别只有INFO及以上级别,可以配置日志级别

    # 设置日志级别
    logging:
      level:
        root: ERROR
    
    • 1
    • 2
    • 3
    • 4

    这种方式能将ERROR级别以及以上级别的日志输出到控制台上,其他级别将不会输出

    3、创建日志文件

    spring boot内部使用Logback作为日志实现的框架。

    先删除前面在application.yml中的日志级别配置

    resources 中创建 logback-spring.xml (默认日志文件的名字)

    
    
    
    
    • 1
    • 2
    • 3

    4、创建测试日志输出

    将以下日志输出到任意controller的方法中即可,例如list方法中

    @ApiOperation("积分等级列表")
    @GetMapping("/list")
    public R listAll(){
    
        log.info("hi i'm helen");
        log.warn("warning!!!");
        log.error("it's a error");
    
        List list = integrationService.list();
        return R.ok().data("list", list);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    二、基本配置说明

    1、configuration

    日志配置的根节点

    
    
    • 1

    2、contextName

    是的子节点。

    每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用设置成其他名字,用于区分不同的应用程序。

    atguiguSrb
    
    • 1

    3、property

    是的子节点,用来定义变量。

    有两个属性,name和value:name的值是变量的名称,value是变量的值。

    通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    4、appender

    是的子节点,是负责写日志的组件

    有两个必要属性name和class:name指定appender名称,class指定appender的全限定名

    对日志进行格式化

    定义日志的具体输出格式

    编码方式

    控制台日志配置

    
    
        
            ${CONSOLE_LOG_PATTERN}
            ${ENCODING}
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    文件日志配置

    表示日志文件的位置,如果上级目录不存在会自动创建,没有默认值。

    默认 true,日志被追加到文件结尾,如果是 false,服务重启后清空现存文件。

    
    
        ${log.path}/log.log
        true
        
            ${FILE_LOG_PATTERN}
            ${ENCODING}
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    5、logger

    可以是的子节点,用来设置某一个包或具体某一个类的日志打印级别、指定

    name:用来指定受此logger约束的某一个包或者具体的某一个类

    level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF。默认继承上级的级别

    可以包含零个或多个元素,标识这个appender将会添加到这个logger

    
    
        
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    6、测试

    测试日志记录的控制台输出、文件输出、以及日志级别

     @ApiOperation("积分等级列表")
        @GetMapping(value = "/list")
        public R list(){
            log.info("this is a info log");
            log.warn("this is a warn log");
            log.error("this is a error log");
            List list = integralGradeService.list();
            return R.ok().data("list",list);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    image-20220608150026194

    三、多环境配置

    springProfile

    在一个基于Spring boot开发的项目里,常常需要有多套环境的配置:开发,测试以及产品。使用springProfile 可以分别配置开发(dev),测试(test)以及生产(prod)等不同的环境

    
    
        
            
        
    
    
    
        
            
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    四、滚动日志

    问题:生产环境下,如果系统长时间运行,那么日志文件会变得越来越大,系统读取和写入日志的时间会越来越慢,严重的情况会耗尽系统内存,导致系统宕机。

    解决方案:可以设置滚动日志。

    1、设置时间滚动策略

    RollingFileAppender是Appender的另一个实现,表示滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将旧日志备份到其他文件

    是的子节点,用来定义滚动策略。

    TimeBasedRollingPolicy:最常用的滚动策略,根据时间来制定滚动策略。

    :包含文件名及转换符, “%d”可以包含指定的时间格式,如:%d{yyyy-MM-dd}。如果直接使用 %d,默认格式是 yyyy-MM-dd。:可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每个月滚动,且是6,则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除。

    
        
        ${log.path}/log-rolling.log
        
            ${FILE_LOG_PATTERN}
            ${ENCODING}
        
        
        
            
            ${log.path}/info/log-rolling-%d{yyyy-MM-dd}.log
            
            15
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    2、设置触发滚动时机

    放在的子节点的位置,基于实践策略的触发滚动策略

    设置触发滚动条件:单个文件大于100M时生成新的文件

    注意:修改日志文件名 此时 ${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log

    
        1KB
    
    
    • 1
    • 2
    • 3

    五、完整的日志配置文件

    
    
    
        atguiguSrb
    
        
        
    
        
        
        
        
        
        
        
    
        
        
    
        
        
    
    
        
        
            
                ${CONSOLE_LOG_PATTERN}
                ${ENCODING}
            
        
    
        
        
            ${log.path}/log.log
            true
            
                ${FILE_LOG_PATTERN}
                ${ENCODING}
            
        
    
        
    
            
            ${log.path}/log-rolling.log
            
                ${FILE_LOG_PATTERN}
                ${ENCODING}
            
    
    
            
            
                
                ${log.path}/info/log-rolling-%d{yyyy-MM-dd}.%i.log
                
                15
    
                
                    1KB
                
            
    
        
    
        
        
        
        
        
    
        
        
            
                
                
            
        
    
        
        
            
                
                
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90

    测试结果:

    由于设置每2KB就进行归档存储,所以在没满2KB的文档记录如下:

    image-20220608150444402

    日志记录满2KB时,归档储存:

    image-20220608150549246

    image-20220608150601407

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    【ajax】ajax详解,ajax是什么?
    Docker部署MySQL双主双从,主主互备
    AJAX学习日记——Day 3
    把大模型装进手机,总共分几步?
    Spring-Batch读取数据 文本数据 数据库数据 XML数据 JSON数据
    Linux ARM平台开发系列讲解(入门篇) 1.6.3 NVIDIA AGX Xavier刷机方法
    11 多线程与高并发 - JUC 阻塞队列(PriorityQueue、PriorityBlockingQueue、DelayQueue)源码解析
    【Java 进阶篇】Java Request 请求转发详解
    uni-app的vue与nvue的区别(更新中)
    评估睡眠阶段分类:年龄和早晚睡眠对分类性能的影响
  • 原文地址:https://blog.csdn.net/m0_67401055/article/details/126114411