保存成功
订阅成功
保存失败,请重试
提交成功

Java 程序如何正确地打日志

作者R哥,在Java行业深耕多年,有着诸多开发和架构实战经验,目前在一家知名第三方支付公司就职系统架构师职位,主要负责公司支付系统平台架构的相关工作。作者经常分享Java后端及架构实战干货及遇到的坑,更多技术干货,可以关注作者微信公众号:Java技术栈。
查看本场Chat

什么是日志

简单的说,日志就是记录程序的运行轨迹,方便查找关键信息,也方便快速定位解决问题。

我们 Java 程序员在开发项目时都是依赖 Eclipse/ Idea 等开发工具的 Debug 调试功能来跟踪解决 Bug,在开发环境可以这么做,但项目发布到了测试、生产环境呢?你有可能会说可以使用远程调试,但实际并不能允许让你这么做。

所以,日志的作用就是在测试、生产环境没有 Debug 调试工具时开发、测试人员定位问题的手段。日志打得好,就能根据日志的轨迹快速定位并解决线上问题,反之,日志输出不好不能定位到问题不说反而会影响系统的性能。

优秀的项目都是能根据日志定位问题的,而不是在线调试,或者半天找不到有用的日志而抓狂…

常用日志框架

log4j、Logging、commons-logging、slf4j、logback,开发的同学对这几个日志相关的技术不陌生吧,为什么有这么多日志技术,它们都是什么区别和联系呢?相信大多数人搞不清楚它们的关系,下面我将一一介绍一下,以后大家再也不用傻傻分不清楚了。

Logging

如图所示,这是 Java 自带的日志工具类,在 JDK 1.5 开始就已经有了,在 java.util.logging 包下。

更多关于 Java Logging 的介绍可以看官方文档

互动评论
评论
二康1 年前
不错
评论
清清2 年前
这篇日志相关的文件写的很不错。
评论
山河不改2 年前
有更深入的吗
评论
陆地火箭2 年前
誉满天下,谤满天下 ------孝庄
评论
Jjie.sun2 年前
说了个梗概,没那么详细.
评论
风力西城2 年前
写了那么多,辛苦了,在深入一些更好
评论
2 年前
"如捕获异常后又抛出了自定义业务异常,此时无需记录错误日志,由最终捕获方进行异常处理。不能又抛出异常,又打印错误日志,不然会造成重复输出日志。" 在微服务架构中,无法保证捕获方一定会输出日志,且如果调用方很多,根本无法定位,还是应该在本服务中捕捉到异常后记录日志
评论
张精神2 年前
内容少了点,但我确实收获了一些以前不知道的关于打log的知识。谢谢!
评论
福泽四洲2 年前
没有一个完整 通用的案例 这个不好,我们需要一个通用型的案例,通过案例做参考
评论
阿润2 年前
只能说是简单了解了下,想深入掌握还是要靠自己在项目中进行练习
评论
Nardo2 年前
简单介绍了java日志的常用框架,但有点太简单。几个地方都是参考官方文档,具体的一些注意事项是有所启发的,也认同,已吸收并整理到公司的日志规范中。其他读者的评论也是觉得内容有点太简单。整体有价值,但作为教程还是可以写得更好。
评论
小码农2 年前
就这样子就完了,确定不是练习项目,是生产吗
评论
郎有钱2 年前
是我没看明白,还是日志级别那张图顺序就是反的?
评论
古木风2 年前
我还以为:举例说明哪些位置应该打印日志,及建议打印哪些参数
评论
小胡子。2 年前
太太太基础了...
评论
信宏阳。2 年前
写的非常的基础,建议博主可以针对自己日常对日志文件的处理进行拓展,比如说分布式集群如何处理日志?异步事件的日志如何处理?错误接口的栈信息如何处理?相信添加了这些最佳实践之后,会对读者有更好的帮助。感谢博主分享
评论
波子汽水2 年前
感觉浪费了两块钱呀
评论
波子汽水2 年前
文章里还有错别字
评论
Zwjx2 年前
太基础了,兄弟
评论
胡文刚2 年前
我还以为:举例说明哪些位置应该打印日志,及建议打印哪些参数
评论
Spring2 年前
浪费了我两块钱
评论
高峰2 年前
会员飘过~
评论
王新光2 年前
太基础了些
评论
jason2 年前
比较基础.深入一点会更好些.
评论
zzz2 年前
说的都是比较基础的内容,下次希望深入一点,给作者一点鼓励吧
评论
刘小龙2 年前
比较基础全面,要是针对日志记录技巧深入分析说明一下就更好
评论
杜嘉希2 年前
好好学习总结一下
评论
指尖的奴隶2 年前
logback和log4j2呢
评论
随心而悦2 年前
可以可以。
评论
查看更多