news 2026/7/14 20:53:24

logback 速查上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
logback 速查上手

下面给出一份“logback 速查手册”,从“零配置能跑”到“线上调优”一条线捋清,复制即可用。

一、logback 是什么

  • 作者:log4j 创始人 Ceki Gülcü 的“亲儿子”,SLF4J 默认实现。

  • 特点:速度更快、内存占用更低、XML/Groovy 双配置、SiftingAppender(多租户/多文件自动分离)、自动热加载。

二、零依赖就能跑(Spring Boot 已内置)

<!-- 实际不用再引,spring-boot-starter-web 已传递 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency>

代码里:

private static final Logger log = LoggerFactory.getLogger(UserService.class); log.info("order {} paid", orderId);

三、核心三件套

Logger(写日志) → Appender(写到哪) → Encoder/Layout(怎么格式化)

四、最常用配置文件(src/main/resources/logback-spring.xml,SpringBoot 专用)

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="30 seconds"> <!-- 30s热加载 --> <springProfile name="dev,test"> <!-- 开发/测试环境彩色控制台 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>%cyan(%d{HH:mm:ss.SSS}) %highlight(%-5level) %magenta([%thread]) %yellow(%logger{36}:%line) - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <springProfile name="prod"> <!-- 生产只按大小/日期滚动文件 --> <property name="LOG_HOME" value="/var/log/app"/> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME}/business.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME}/business.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern> <maxFileSize>200MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line - %msg%n</pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- 异步提升性能,丢日志<0.01%可接受 --> <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="FILE"/> <queueSize>2048</queueSize> <discardingThreshold>0</discardingThreshold> <includeCallerData>false</includeCallerData> </appender> <root level="INFO"> <appender-ref ref="ASYNC"/> </root> </springProfile> <!-- 单独给 error 再写一份,方便告警 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_HOME:-./logs}/error.log</file> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_HOME:-./logs}/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>15</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %logger{36}:%line - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="ERROR"/> </root> </configuration>

要点

  • 文件名必须是 logback-spring.xml 才能用 <springProfile> 动态区分环境,否则启动报错。

  • scan="true" 修改配置后 30 秒自动生效,无需重启。

  • AsyncAppender 队列满时会丢弃 TRACE/DEBUG,INFO 以上不丢(discardingThreshold=0)。

五、多租户/多文件自动分离(SiftingAppender 实战)

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"> <discriminator> <key>tenantId</key> <defaultValue>default</defaultValue> </discriminator> <sift> <appender class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/var/log/app/${tenantId}.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/app/${tenantId}.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>15</maxHistory> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %level %logger{36} - %msg%n</pattern> </encoder> </appender> </sift> </appender>

代码里放 discriminator:

MDC.put("tenantId", TenantContext.get());

即可按租户自动拆文件,再也不用 if-else 新建 logger。

六、线上调优 checklist

  1. 关闭 debug 级别:<logger name="com.alibaba.nacos" level="WARN"/>

  2. 关闭 includeCallerData(AsyncAppender 里拿行号会慢 5~10 倍)。

  3. 使用 SizeAndTimeBasedRollingPolicy 而非 FixedWindowRollingPolicy,大并发下减少重命名竞争。

  4. 磁盘独立:日志盘与业务盘分离,避免 java.io.IOException: No space left on device 把应用拖死。

  5. 监控:

  • 文件句柄数 /proc/sys/fs/file-max

  • 日志写入延迟:appender.getQueueSize() / appender.getDiscardingCount()

  • 接入 Prometheus:通过 logback-metrics 暴露 logback_events_total{level="error"} 做告警。

七、常见坑

现象

原因

快速 fix

修改 logback.xml 不生效

文件名写成 logback.xml 却被 spring 提前加载

改名 logback-spring.xml

控制台彩色失效

Windows 老版本 ANSI 不支持

加 jansi 依赖或关闭彩色

启动报 “no applicable action for [springProfile]”

用了普通 logback.xml

换 logback-spring.xml

日志文件中文乱码

没有 <charset>UTF-8</charset>

全部 encoder 加 charset

一张图记忆 Logger → 级别开关 ↓ Appender → 写控制台?文件?ES? ↓ Encoder → 长啥样?JSON? pattern? ↓ RollingPolicy → 多大切割?保留几天?

把上面模板直接粘进项目,30 秒内就能拥有“彩色控制台 + 大小时间滚动 + 异步写盘 + ERROR 单独文件”的标配日志,再按环境切 profile,线上稳得一批。祝排错愉快!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 12:02:01

Doris 与 OceanBase 物化视图对比分析

一、核心架构差异维度DorisOceanBase物化视图类型双轨制&#xff1a;同步物化视图 异步物化视图单轨制&#xff1a;异步物化视图&#xff08;4.3.0 版本引入&#xff09;同步机制- 同步视图&#xff1a;基表变更实时同步&#xff0c;强一致性- 异步视图&#xff1a;按策略周期…

作者头像 李华
网站建设 2026/7/1 0:04:36

软件项目验收测试测什么内容?2026第三方软件测试机构推荐

软件项目验收测试是项目落地交付的关键环节&#xff0c;广泛应用于政企项目验收、产品上线审核、系统升级交付、招投标合规验证等各类场景。软件项目验收测试覆盖哪些核心检测范围&#xff1f;不同需求下又该如何选择靠谱的第三方测试机构&#xff1f;本文将为你逐一拆解&#…

作者头像 李华
网站建设 2026/6/25 19:45:29

Pelco KBD300A 模拟器:20.搭建pytest集成测试基础框架 + 模拟器闭环测试

第 20 篇&#xff1a;搭建集成测试基础框架 模拟器闭环测试 下面我们将一步一步详细完成集成测试基础框架搭建&#xff0c;并实现模拟器闭环测试&#xff08;串口收到数据 → 协议解析 → VirtualDevice 状态更新 → 可选返回响应&#xff09;。 目标&#xff1a; 不依赖真…

作者头像 李华
网站建设 2026/7/4 9:29:39

1 篇看懂:以太网多参量传感器为什么能适配所有工业场景?

在工业智能化转型中&#xff0c;环境与设备监测的核心痛点是 “场景差异大、需求碎片化”—— 化工车间要防有毒气体泄漏&#xff0c;数据中心需稳控温湿度&#xff0c;仓储库房要适配多品类存储环境&#xff0c;传统单一功能传感器难以兼顾。而以太网多参量传感器凭借 “全功能…

作者头像 李华
网站建设 2026/7/13 17:06:47

不只是替代谷歌:为你带来新视角的11个搜索引擎与核心价值解析

如果你正在寻找一个替代谷歌的搜索引擎&#xff0c;你来对地方了。 读完本指南后&#xff0c;你将知道哪些是最佳的替代搜索引擎。以及为什么每个搜索引擎都可能更适合你。 我们开始吧。 1. Bing 如果你想要类似谷歌的搜索体验&#xff0c;并借助OpenAI驱动的AI结果&#xff0c…

作者头像 李华
网站建设 2026/7/2 11:52:47

springboot演唱会售票管理系统设计实现

背景分析 演唱会售票管理系统源于传统票务管理的低效与痛点。线下售票存在排队拥堵、黄牛倒票、数据统计滞后等问题&#xff1b;线上分散平台导致信息不透明、跨平台购票体验差。SpringBoot框架的成熟技术栈为系统开发提供了高效解决方案&#xff0c;其模块化设计、自动化配置…

作者头像 李华