Logback.xml是什么 如何用它来配置应用程序日志
技术百科
月夜之吻
发布时间:2026-01-27
浏览: 次 logback.xml 是 Logback 框架默认 XML 配置文件,必须置于 src/main/resources/ 下,按 logback-test.xml → logback.xml → logback.groovy 顺序加载,文件名大小写敏感,配置错误将静默降级为控制台输出。
logback.xml 是 Logback 框架的默认 XML 格式配置文件,用于定义日志输出格式、级别、目的地(如控制台、文件)、滚动策略等。它不依赖外部注解或代码,启动时由 LoggerContext 自动加载,是 Java 应用(尤其 Spring Boot 项目)中最常用、最灵活的日志配置方式。
logback.xml 放在哪?类路径下必须是这个文件名
Logback 启动时按固定顺序查找配置文件:logback-test.xml → logback.xml → logback.groovy。生产环境通常用 logback.xml,且必须放在 src/main/resources/ 下(Maven/Gradle 默认类路径根目录)。如果放错位置(比如 src/main/java/ 或子目录),Logback 会回退到默认控制台输出,且控制台会打印警告:
WARN in ch.qos.logback.classic.LoggerContext[default] - No appenders present in context
- 文件名必须严格为
logback.xml(大小写敏感,不能叫Logback.xml或logback-config.xml) - Spring Boot 项目中,若同时存在
application.properties中的logging.config=...,优先以该配置为准 - 修改后需重启应用生效(Logback 默认不热重载 XML,除非显式启用
scan="true")
一个最小可用 logback.xml 长什么样
以下是最简但可运行的配置:定义一个控制台输出器(ConsoleAppender),绑定到 root logger,并设置日志级别为 INFO:
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
定义日志“去哪”,class属性必须是完整类名,如ch.qos.logback.core.ConsoleAppender或ch.qos.logback.core.rolling.RollingFileAppender -
决定“长啥样”,里的占位符如%d、%level、%msg是固定语法,不可拼错 -
是所有 logger 的默认父节点;单独的可覆盖特定包日志级别
常见需求:输出到文件并按天滚动
用 RollingFileAppender 替代 ConsoleAppender,配合 TimeBasedRollingPolicy 实现按天归档(如 app.log + app.log.2025-04-01):
logs/app.log logs/app.log.%d{yyyy-MM-dd} 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
-
指定当前活跃日志文件路径,目录(如logs/)需存在或由应用有写权限创建 -
中的%d{...}格式必须与TimeBasedRollingPolicy兼容,否则滚动失败且无报错提示 -
控制保留多少天的历史文件,单位是“天”,不是文件个数 - 若要同时输出到控制台和文件,需在
中添加两个,分别引用CONSOLE和FILE
容易被忽略的坑:异步日志、变量替换、profile 活性切换
实际项目中,直接写死路径或级别很快会不够用。Logback 提供了 、(Spring Boot)、AsyncAppender 等机制,但配置稍有偏差就静默失效:
- 使用
后,必须用${LOG_PATH}引用,不能写成$LOG_PATH或#{LOG_PATH} - Spring Boot 中推荐用
,这样可从a统一管理路径
pplication.yml
- 加
AsyncAppender提升性能时,必须把真正干活的 appender(如FILE)嵌套在内部,再引用它 —— 不是把AsyncAppender当作顶层 appender 直接用 - Logback 本身不支持 profile(如
dev/prod),得靠 Spring Boot 的标签包裹配置块,且该标签仅在 Spring Boot 环境下有效
XML 格式看着简单,但缩进错误、标签未闭合、类名拼错、占位符大小写不对,都会导致 Logback 降级为默认配置——而它几乎不报错,只在启动日志里悄悄提示 “Ignoring configuration file”。真出问题时,先检查控制台有没有这类 WARN,再确认 XML 是否能被正确解析。
# ai
# 放在
# 这类
# 看着
# 重启
# 启动时
# 只在
# app
# 不支持
# 配置文件
# Property
# java
# class
# xml
# console
# 报错
# 异步
# spring
# yy
# Logging
# gradle
# spring boot
# maven
# 拼错
# 报错提示
# logback
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- c++如何获取map中所有的键_C++遍历键值对提
- 如何使用Golang log设置日志输出格式_Go
- Python与OpenAI接口集成实战_生成式AI
- C++中的constexpr和const有什么区别
- Win10电脑怎么设置IP地址_Windows10
- 如何在Golang中使用replace替换模块_指
- Mac系统更新下载慢或失败怎么办_解决macOS升
- c# 在高并发下使用反射发射(Reflection
- Windows资源管理器总是卡顿或重启怎么办?(修
- php8.4如何实现队列任务_php8.4redi
- 如何使用Golang reflect检查方法数量_
- 如何自定义Windows终端的默认配置文件?(Po
- Win11开机自检怎么关闭_跳过Win11开机磁盘
- c++ stringstream用法详解_c++字
- Win11怎么清理C盘OneDrive缓存_Win
- 如何在 Go 同包不同文件中正确引用结构体
- c++的STL算法库find怎么用 在容器中查找指
- 如何使用正则表达式批量替换重复的星号-短横模式为固
- Windows 11怎么设置默认解压软件_Wind
- php8.4新语法match怎么用_php8.4m
- How to Properly Use NumPy
- Win10文件历史记录怎么用 Win10开启自动备
- MAC怎么截图并快速编辑_MAC自带截图快捷键与标
- c++ namespace命名空间用法_c++避免
- Python爬虫项目实战教程_Scrapy抓取与存
- Python函数接口文档化_自动化说明【指导】
- C#如何使用XPathNavigator高效查询X
- php485能和物联网模块通信吗_php485对接
- Win11文件扩展名怎么显示 Win11查看文件后
- Windows11怎样开启游戏模式_Windows
- VSC怎么快速定位PHP错误行_错误追踪设置法【方
- 如何在 Go 后端安全获取并验证前端存储的 JWT
- Windows10怎么卸载预装软件_Windows
- 如何在 Go 中判断变量是否为函数类型
- 如何使用Golang实现容器自动化运维_Golan
- 短链接怎么用php递归还原_多层加密链接的处理法【
- php中作用域操作符能访问私有静态属性吗_访问权限
- Go 中实现 Python urllib.quot
- 如何优化Golang Web性能_Golang H
- Win11怎么更改文件夹图标_自定义Win11文件
- Win10如何卸载Skype_Win10卸载Sky
- php打包exe怎么传递参数_命令行参数接收方法【
- Win11怎么设置虚拟键盘_打开Win11屏幕键盘
- php订单日志怎么记录评价_php记录订单评价日志
- MySQL 中使用 IF 和 CASE 实现查询字
- Python脚本参数接收_sys与argparse
- 如何解决同一段404代码在不同主机上表现不一致的问
- 为什么Go需要go mod文件_Go go mod
- Python函数参数高级用法_默认值与可变参数解析
- Win11怎么更改系统语言为中文_Windows1


QQ客服