# 本节要点 - LogBack集成使用 - 了解logback.xml的配置含义 logj4 # 一、什么是logback? https://logback.qos.ch/ 最早的是log4j,后来发展优化后Logback !\[image-20251020141636487\](https://woniumd.oss-cn-hangzhou.aliyuncs.com/daiwei/java/20251020141636576.png) 门面模式/桥接模式 !\[image-20251203153048084\](https://woniumd.oss-cn-hangzhou.aliyuncs.com/daiwei/java/20251203153048152.png) Logback 主要分为以下三个模块: - logback-core:Logback 的基础模块 Appender ,Layout - logback-classic:它是 log4j 的改良版本,同时它完整实现了 Slf4j \*\*门面日志\*\*框架,可以很方便地更换成其它日志系统。 - logback-access:访问模块与 Servlet 容器集成提供通过 Http 来访问日志的功能 核心组件: 1、Appender 2、Layout/Encoder 3、Log对象 SpringBoot 内部已经集成了 slf4j,我们在 resource 目录下创建一个名为 logback.xml 的文件。 日志级别按照从高到低依次为:TRACE \< \*\*DEBUG \< INFO\*\* \< WARN \< ERROR ,常用的有:\*\*DEBUG,INFO\*\*,WARN,ERROR # 二、与System.out.print有什么区别 System.out.println(); System 的问题: 1、阻塞式(不允许在生产中使用),效率底下 \*\*面试题:\*\* \| 特性 \| \`System.out.print\` \| Logback \| \| :----------------- \| :-------------------------------------------------------- \| :----------------------------------------------------------- \| \| \*\*核心机制\*\* \| \*\*同步阻塞I/O\*\* \| \*\*支持同步和异步Appender\*\* \| \| \*\*对性能影响\*\* \| \*\*高\*\*。每次调用都直接进行写操作,线程会阻塞直到I/O完成。 \| \*\*低\*\*(尤其异步模式下)。日志事件被放入队列,由后台线程处理,不阻塞主业务线程。 \| \| \*\*I/O 操作\*\* \| 直接写入控制台,每次调用都可能引发系统调用。 \| 缓冲写入。积累一定量的日志后再一次性写入文件/网络,减少I/O次数。 \| \| \*\*日志级别\*\* \| 无。无法按级别过滤,所有输出都必须执行。 \| 有。可在运行时动态调整级别(如DEBUG, INFO, ERROR),过滤掉不需要的日志,极大提升性能。 \| \| \*\*输出目标\*\* \| 固定为标准输出(控制台)。 \| 灵活。可输出到文件、数据库、网络、Kafka等,且可同时输出到多个目标。 \| \| \*\*格式化\*\* \| 简单,使用字符串连接(\`+\`),可能产生大量临时对象。 \| 高效。使用参数化占位符(\`log.info("User: {}", user)\`),避免不必要的字符串拼接。 \| \| \*\*生产环境适用性\*\* \| \*\*不推荐\*\*。性能瓶颈,缺乏管理功能。 \| \*\*行业标准\*\*。为高性能、高并发环境设计。 \| # 三、如何使用 ## 1、加依赖 - 对于 Spring Boot 3.2.4 项目,\*\*不需要手动添加 Logback 依赖\*\*。 - Spring Boot 的默认配置已经为你集成了 Logback。 - spring-boot-starter-web 已经包含了 logback-core和logback-classic ## 2、代码使用 ### 1、最简单的使用,加注解 - 类上加注解 \`\`\` @Slf4j \`\`\` - 工厂方法创建对象 \`\`\` Logger log = LoggerFactory.getLogger(FirstController.class); \`\`\` 测试一下: \`\`\` package com.dw.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /\*\* \* @author daiwei \* @Description: \*/ @RestController @RequestMapping("/logback") @Slf4j public class LogbackController { @RequestMapping("/test") public String test(){ log.trace("-----trace"); log.debug("-----debug"); log.info("-----info"); log.warn("-----warn"); log.error("-----error"); return "logback test"; } } \`\`\` 备注:默认的全局日志等级是INFO 日志等级的优先级 : TRACE \< DEBUG \< INFO \< WARN \< ERROR ### 2、直接写在配置里yaml \`\`\` logging: level: root: info com.example.demo.mapper: debug file: name: d:\\\\demo.log pattern: console: "%blue(%d{yyyy-MM-dd HH:mm:ss.SSS}) \[%green(%t)\] \[%yellow(%logger{20})\]-\[%L\]-\[%highlight(%p)\] %m%n" \`\`\` (root是父节点的意思,所有日志都按这个标准来;) ### 3、加配置logback.xml 只需要一个 logback.xml,放在resource目录下面 !\[image-20251019121832006\](https://woniumd.oss-cn-hangzhou.aliyuncs.com/java/daiwei/20251019121832073.png) 主要有4个节点: - 标签是配置文件的根元素。 - 一些属性的配置,主要用于appender使用这些属性,作为打印的格式以及日志文件路径等配置 - 需要记录日志目的地,可以是控制台,也可以是文件 - 滚动记录日志文件, 滚动的方式保存每一天你的日志,让日志更加的清晰,便于查看 - 输出的格式 ,自己定义格式,样式、颜色... - 指定需要打印的日志,理解成root的子类,对于某一些包的个性化分级打印 - 父级打印规则,全局通用 配置内容如下: \`\`\` ${PATTERN} ${FILE_PATH} 180 100MB 5GB ${PATTERN} \`\`\`