讲师中心 微信公众号
AI工具推荐 视频效率加速

在Java中如何实现日志记录功能_Java日志工具项目说明

千明同学_6119

千明同学_6119

发布时间:2026-01-26 16:35:02

|

239人浏览过

|

来源于php中文网

原创

新项目应选用 slf4j + logback,而非 java.util.logging;因 JUL 配置僵硬、MDC 支持弱、异步难实现,而 slf4j+logback 灵活高效且生态完善,需确保 classpath 有且仅有一个绑定实现(如 logback-classic)。

在java中如何实现日志记录功能_java日志工具项目说明

Java里该选 java.util.logging 还是 slf4j + logback

直接说结论:新项目别碰 java.util.logging(JUL),它配置僵硬、MDC 支持弱、异步日志难搞,连 Spring Boot 都默认弃用。主流选择是 slf4j 作门面 + logback 作实现,兼顾灵活性、性能和生态兼容性。

常见错误是只引 slf4j-api 却漏掉绑定实现,运行时抛 java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder。必须确保 classpath 下有且仅有一个 binding,比如 logback-classic。

  • slf4j-api:只提供 Logger 接口,编译期依赖
  • logback-classic:运行时真正干活的,自带 slf4j-api 依赖
  • 不要同时引入 log4j-slf4j-impl 和 logback-classic,会冲突

怎么让日志输出到文件并按天滚动

logback 的 RollingFileAppender 是标准解法,关键在 TimeBasedRollingPolicy。注意不是所有 rolling 策略都支持“按天”,FixedWindowRollingPolicy 是按序号轮转,不满足时间维度需求。

典型配置中容易忽略两点:一是 fileNamePattern 必须含日期占位符(如 %d{yyyy-MM-dd}),二是 file 属性指定的是当前活跃日志路径,不是模板。

立即学习“Java免费学习笔记(深入)”;

Docker Container Cleaner
Docker Container Cleaner

CLI工具,用于清理已停止的Docker容器、未使用的镜像、卷和网络,释放磁盘空间。

下载
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/app.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
    <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
      <maxFileSize>100MB</maxFileSize>
    </timeBasedFileNamingAndTriggeringPolicy>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

如何在日志里打印用户 ID 或请求 ID

靠 MDC(Mapped Diagnostic Context)。它本质是当前线程的 ThreadLocal<Map>,适合 Web 请求这种“一次调用贯穿多个方法”的场景。但要注意:线程复用(如 Tomcat 线程池、CompletableFuture)会导致 MDC 脏数据。

Spring Boot 用户建议用 Logbook 或自定义 Filter + OncePerRequestFilter 注入 request ID;纯 Servlet 项目务必在 filter 的 doFilter 结尾调用 MDC.clear()。

  • 写入:MDC.put("requestId", "abc123")
  • 日志 pattern 中引用:%X{requestId:-N/A}(:-N/A 表示空值时显示 N/A)
  • 异步线程需显式拷贝:MDC.getCopyOfContextMap() + MDC.setContextMap()

为什么本地能打日志,上生产就没了

最常见原因是日志级别配置不一致或路径无写权限。logback 默认级别是 DEBUG,但很多生产 logback-spring.xml 会设成 WARN 或 ERROR,导致 info() 日志直接被丢弃。

另一个高频坑是相对路径:开发时 logs/app.log 写在项目根目录下没问题,但生产常以 systemd 或 Docker 启动,工作目录可能是 / 或 /app,导致日志写入失败且无报错——logback 默认静默忽略 IO 异常。

  • 加 <configuration debug="true"> 查看 logback 初始化过程
  • 检查 logs/ 目录是否存在、属主是否为运行用户、磁盘是否满
  • 避免用相对路径,改用绝对路径如 /var/log/myapp/app.log

MDC 跨线程丢失、日志级别误配、文件路径权限问题,这三类故障占线上日志失联的 80% 以上,排查时优先盯死它们。

热门AI工具

更多
Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

645

2023.10.26

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

284

2024.02.23

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

469

2024.02.23

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

265

2024.02.23

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

328

2024.02.23

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

329

2024.02.23

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

541

2024.02.23

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

302

2024.02.23

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

60

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn