日志技术Logback

一、准备工作

引入logback的依赖(springboot中无需引入,在springboot中已经传递了此依赖)

XML 复制代码
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.4.11</version>
</dependency>

二、引入配置文件

引入配置文件 logback.xml,resources 目录下

配置文件解析

XML 复制代码
<configuration>
    <!--  控制台输出  -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%logger显示日志记录器的名称, %msg表示日志消息,%n表示换行符  -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
        </encoder>
    </appender>
    <!--  系统文件输出  -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--  日志文件输出的文件名, %i表示序号  -->
            <FileNamePattern>D:/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
            <!--  最多保留的历史日志文件数量  -->
            <MaxHistory>30</MaxHistory>
            <!--  最大文件大小,超过这个大小会触发滚动到新文件,默认为 10MB  -->
            <!--一个文件最多存储10MB日志就会换一个新的-->
            <maxFileSize>10MB</maxFileSize>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!-- 格式化输出:%d 表示日期,%thread 表示线程名,%-5level表示级别从左显示5个字符宽度,%msg表示日志消息,%n表示换行符  -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}-%msg%n</pattern>
        </encoder>
    </appender>
    <!--  日志输出级别  -->
    <!--level="ALL"表示输出所有级别的日志,包括TRACE、DEBUG、INFO、WARN、ERROR-->
    <!--level="OFF"表示不输出任何日志(不区分大小写)-->
    <!--level="DEBUG"表示输出DEBUG及以上级别的日志,包括DEBUG、INFO、WARN、ERROR-->
    <!--level="INFO"表示输出INFO及以上级别的日志,包括INFO、WARN、ERROR-->
    <!--level="WARN"表示输出WARN及以上级别的日志,包括WARN、ERROR-->
    <!--level="ERROR"表示输出ERROR级别的日志-->
    <root level="INFO">
        <!--  控制台输出(引用上面的变量)  -->
        <appender-ref ref="STDOUT"/>
        <!--  文件输出(引用上面的变量)  -->
        <appender-ref ref="FILE"/>
    </root>
</configuration>

(1)控制台输出解析

  1. appender元素

    • 定义了一个名为"STDOUT"的日志输出组件
    • class="ch.qos.logback.core.ConsoleAppender"指定这是一个控制台输出的appender,用于将日志信息输出到控制台
  2. encoder元素

    • class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"表示使用模式布局编码器
    • 作用是将日志事件转换为指定格式的字符串
  3. pattern元素

    • 定义了日志输出的具体格式模板
    • 包含多个占位符,每个占位符有特定含义:
      • %d{yyyy-MM-dd HH:mm:ss.SSS}:输出日期时间,精确到毫秒(可以在打括号内修改想要的格式)
      • [%thread]:输出线程名称,用方括号包围
      • %-5level:输出日志级别,左对齐,固定占5个字符宽度(如果不足五个字符宽度,就会用空格占位)
      • %logger{50}:输出日志记录器名称,最大长度50个字符(如果超过50,就会自动简化)
      • %msg:输出实际的日志消息内容(就是你在写程序是log.debug("xxxx")之类的发来的内容)
      • %n:表示换行符

(2)文件输出解析

  1. appender元素

    • 定义了一个名为"FILE"的日志输出组件
    • class="ch.qos.logback.core.rolling.RollingFileAppender"指定这是一个滚动文件输出的appender,用于将日志信息输出到文件,并支持日志文件的滚动管理
  2. rollingPolicy元素

    • class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"表示使用基于时间和大小的滚动策略
    • 这是一种复合滚动策略,当日志文件达到指定大小或经过指定时间时,会创建新的日志文件
  3. FileNamePattern元素

    • 定义日志文件的命名模式:D:/tlias-%d{yyyy-MM-dd}-%i.log(保存的位置及其文件名)
  4. MaxHistory元素

    • 设置最多保留30个历史日志文件
    • 超过这个数量后,最旧的日志文件会被自动删除
  5. maxFileSize元素

    • 设置单个日志文件的最大大小为10MB
    • 当日志文件大小达到10MB时,会自动创建新的日志文件
  6. encoder元素

    • 与控制台输出类似,定义了日志的格式(区别是写在文件里的日志)
    • 确保文件日志与控制台日志格式一致,便于统一查看

(3)日志开关root

负责指定输出哪些日志,level可以限定输出的日志范围

appender-ref可以引用上方定义的日志记录器

三、日志级别

|-------|----------------------------------------|------------------|
| 日志级别 | 说明 | 记录方式 |
| trace | 追踪,记录程序运行轨迹 【使用很少】 | log.trace("...") |
| debug | 调试,记录程序调试过程中的信息,实际应用中一般将其视为最低级别 【使用较多】 | log.debug("...") |
| info | 记录一般信息,描述程序运行的关键事件,如:网络连接、io操作 【使用较多】 | log.info("...") |
| warn | 警告信息,记录潜在有害的情况 【使用较多】 | log.warn("...") |
| error | 错误信息 【使用较多】 | log.error("...") |

我们想要一个类输出日志,有固定的套路。

只需要在类内定义一个Logger对象(注意我这里使用的是org.slf4j的Logger对象)

复制代码
private static final Logger log = LoggerFactory.getLogger(所属类的字节码文件)

然后在类中就可以通过 log.级别( "日志内容" ) 输出想要的内容。

相关推荐
崔庆才丨静觅12 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
曹牧12 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
passerby606112 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了12 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅13 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅13 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法13 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty72513 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎13 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄13 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea