• SpringBoot进阶-日志等级配置与操作


    一、日志等级

    1. trace:最低等级
    2. debug:调试用,通常用于跟踪程序进展
    3. info: 记录用,通常用于记录程序行为
    4. warn:警告
    5. error:错误
    6. fatal:灾难性错误,最高等级

    二、设置日志等级

    SpringBoot 默认日志等级为 info,也就是说只在控制台输出 info 或更高等级的日志

    在开发阶段如果想临时地更改日志等级进行调试,可以使用下面这个简单的配置:

    debug: true
    
    • 1

    真正要设置项目日志等级则要这样:

    logging:
      level:
        root: info
        com.mzz.example.controller: debug
        com.mzz.example.service: debug
    
    • 1
    • 2
    • 3
    • 4
    • 5

    日志的等级是根据组或包来设置的,其中 root 组即为整个项目

    但以包为单位设置日志等级很麻烦,所以可以自己设置组别,然后为每组分别设置等级:

    logging:
      group:
        server: com.mzz.example.service, com.mzz.example.controller
        sql: com.mzz.example.mapper
      level:
        root: info
        server: debug
        sql: trace
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    三、打印日志

    打印日志首先要获取日志对象,如下:

    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        public static final Logger log = LoggerFactory.getLogger(UserController.class);
        
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    由于这行代码写法比较固定,可以用 Lombok 中的 @Slf4j 注解代替,如下:

    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UserController {
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    拿到日志对象后,调用方法即可打印日志,各个等级作为方法名即可打印对应等级的日志:

    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class UserController {
    
        @Autowired
        private IUserService userService;
        
        @PostMapping
        public Result save(@RequestBody User user) {
            log.debug("尝试保存新用户:{}", user);
            boolean flag = bookService.save(user);
            if (!flag) {
    	        log.error("保存新用户失败:{}", user);
            }
            else {
    	        log.info("已保存新用户:{}", user);
            }
            return Result.success();
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    打印日志时,{} 可以作为占位符,数组在之后传入

    另外,没有 fatal 等级的日志打印方法,因为 fatal 是指会使程序崩溃的严重错误,程序崩溃日志系统自然无法继续运行,所以打印 fatal 级别的日志没有意义

    四、自定义日志格式

    设置 logging.pattern.console 属性可以自定义控制台打印日志的格式,如下:

    logging:
      pattern:
        console: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n"
    
    • 1
    • 2
    • 3

    上为 SpringBoot 默认的日志格式,参考自:https://blog.csdn.net/qq_34049732/article/details/116722116

    五、文件记录日志

    看如下示例:

    logging:
      file:
        name: log/server.log	# 指定文件名称以及路径:启动路径下的 log 文件夹下
    #    path: log/	# 指定日志文件路径,不含名称,默认为 spring.log
      logback:
        rollingpolicy:
          max-file-size: 1MB	# 指定文件最大规格
          file-name-pattern: log/server_%d{yyyy-MM-dd}_%i.log	# 指定文件名称格式以及路径
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    滚动日志可以设置每个日志的最大大小

    设置滚动日志也依然要设置日志名称,如上的 server.log,里面是最近的日志

    logging.file.name 和 logging.file.path 只需配置一个,若同时存在,则 path 无效

  • 相关阅读:
    【学习笔记】用线段树维护区间计数问题
    【数据整理】FROM_GLC等土地覆盖数据整理
    在 JavaScript 中复制对象
    学生邮箱白嫖/免费安装JetBrains全家桶(IDEA/pycharm等) —— 保姆级教程
    Java代码实现两个数据库之间的数据同步
    C++ opencv 通道分离与合并
    x210项目重新回顾之十六rootfs再讨论
    最新下载:Paragon NTFS for Mac 15【软件附加安装教程】
    SpringBoot 代码混淆真香,再也不用担心反编译代码泄露...
    华为数字能源,开启超充新纪元
  • 原文地址:https://blog.csdn.net/Cey_Tao/article/details/127572412