当前位置: 首页 > article >正文

基于spring boot的日志框架最佳实践

1. 日志框架介绍

        日志框架由两个部分组成,一个是日志门面,即日志接口,一个是日志实现。日志门面有JCL、jboss-logging、SLF4j等日志门面接口,而日志实现又有Log4j、JUL、Log4j2、Logback。

        Spring boot默认引入了日志门面和日志实现,所以在maven的pom.xml文件中不需要额外添加日志相关的组件,其默认使用组合为:SLF4j+Logback

        目前日志门面基本只用SLF4j,日志实现有较多的选择性,相比Logback,Log4j2性能更高,更强大,如果作者想更换为更强大的日志实现,替换默认的日志框架(Logback)为 Log4j2。这是通过 Maven 的依赖管理功能来实现的,在pom.xml文件中添加如下代码:

<!--       排除默认日志实现 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

2. 日志添加 

在Spring boot中添加日志非常简单,只需要在类上添加注解,并在想要打印日志的地方添加日志即可。

@SpringBootTest
@Slf4j
class Springboot01HelloApplicationTests {

    @Test
    void contextLoads() {
        log.trace("trace日志测试");
        log.debug("debug日志测试");
        log.info("info日志测试");
        log.warn("warn日志测试");
        log.error("error日志测试");
    }
}

日志内容的格式是:

格式: 时间  级别  进程id --- 项目名 --- 线程名 --- 当前类名: 日志内容

 

 3. 日志打印级别

上诉一共有5种日志打印,其级别从低到高,打印内容从多到少。

级别:由低到高:ALL -- TRACE -- DEBUG -- INFO -- WARN -- ERROR -- OFF
越打印,越粗糙; 日志有一个默认级别(INFO);只会打印这个级别之上的所有信息;

# 日志配置
logging:
  level:
    root: info  # 如果哪个包、哪个类不说日志级别,就用默认root的级别,默认info
    com:  # 指定用户业务代码包日志级别
      wulang:
        pnt: trace

 

同时也可以对业务包进行分组设置,更加精细化和灵活控制各个业务包的日志级别打印:

# 设置日志组
#logging.group.biz=com.atguigu.service,com.atguigu.dao
# 整组批量设置日志级别
#logging.level.biz=debug

5. 日志文件输出

Spring boot默认只把日志写在控制台,如果想额外记录到文件,可以在配置文件中添加logging.file.name或logging.file.path配置项

logging.file.namelgging.file.path示例效果
未指定未指定仅控制台输出
指定未指定my.log写入指定文件,可以加路径
未指定指定/var/log写入指定目录,文件名为:spring.log
指定指定以logging.file.name为准
# 当前项目所在的根文件夹下生成一个 指定名字的 日志文件
logging.file.name=boot.log

6. 文件归档和切割

归档:每天的日志单独存到一个文档中

切割:每个文件指定大小,超过这个大小,切割成另一个文件 

配置项描述
logging.logback.rollingpolicy.file-name-pattern

日志存档的文件名格式:

默认值:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

logging.logback.rollingpolicy.clean-history-on-start

应用启动时是否清除以前存档:

默认值:false

logging.logback.rollingpolicy.max-file-size

每个日志文件的最大存储值:

默认10MB

logging.logback.rollingpolicy.total-size-cap

日志文件被删除之前,可以容纳的最大值。

默认0B,不设置大小,无限存储。

设置1GB则磁盘存储日志总量超过1GB就会删除旧日志文件

logging.logback.rollingpolicy.max-history

日志文件保存的最大天数;

默认值:7

# 最大文件大小切割,单位M 默认 10M
logging.logback.rollingpolicy.max-file-size=10MB
# 日志删除
logging.logback.rollingpolicy.total-size-cap=1GB
logging.logback.rollingpolicy.max-history=7

7. 总结 

一般情况下,日志配置文件都是默认的,只要配置了一份,其他项目拿来复用即可,不需要进行特意的设置,相对模版化,作者给出一份完整的配置,作为最佳实践以供使用。

# 日志配置
logging:
  level:
    root: info  # 如果哪个包、哪个类不说日志级别,就用默认root的级别,默认info
    com:  # 指定用户业务代码包日志级别
      wulang:
        pnt: debug
  file: #当前项目所在的根文件夹下生成一个 指定名字的 日志文件
    name: boot.log
  logback:
    rolling policy:
      clean-history-on-start: false # 应用启动时是否清除以前存档
      max-file-size: 10MB # 每个日志文件的最大存储值
      total-size-cap: 10GB # 日志累计最大存储值
      max-history: 365 # 日志文件保存的最大天数

 

 


http://www.kler.cn/a/541347.html

相关文章:

  • 项目的虚拟环境的搭建与pytorch依赖的下载
  • 【Unity】性能优化:UI的合批 图集和优化
  • Android图片加载框架Coil,Kotlin
  • 白话文实战Nacos(保姆级教程)
  • 云原生(五十四) | RDS数据导入与导出
  • FFmpeg(一) 简介
  • 开发完的小程序如何分包
  • 神经网络|(八)概率论基础知识-二项分布及python仿真
  • 1.Excel:某停车场计划调整收费标准❗(13)
  • 5、大模型的记忆与缓存
  • MariaDB MaxScale实现mysql8主从同步读写分离
  • 升级进行中 您的邮箱正在作为Outlook 2013升级的一部分优化
  • DEEPSEEK与GPT等AI技术在机床数据采集与数字化转型中的应用与影响
  • 苍穹外卖学习
  • 利用Minio实现大文件分片上传、断点续传、秒传
  • 5G无线网络技术深度解析
  • 游戏引擎学习第94天
  • 【系统架构设计师】体系结构文档化
  • 8种方法解决电脑QQ能上网但是浏览器不能上网问题
  • Android车机DIY开发之软件篇(十二) AOSP12下载编译
  • windows server独立部署Qwen2.5-vl-7B
  • Web3 的未来:从技术变革到社会经济影响的深度思考
  • 13.6 基于 LangChain架构优化实战:OpenAI-Translator翻译系统重构与10倍效率提升秘籍
  • vue基础(四)
  • 综合评价 | 基于随机变异系数-TOPSIS组合法的综合评价模型(Matlab)
  • python-leetcode 23.反转链表