在Java应用程序开发中,日志记录是一个重要的方面。良好的日志记录可以帮助开发人员更好地理解应用程序的运行情况,并在出现问题时进行故障排除。但是,如何优雅地处理日志记录、选择适当的日志级别和类型是每个开发人员都应该关注的问题。本文将从设计和架构的角度,探讨如何优雅地处理日志记录,并提供一些实用的建议和示例代码。
log4j、Logging、commons-logging、slf4j、logback,开发的同学对这几个日志相关的技术不陌生吧,为什么有这么多日志技术,它们都是什么区别和联系呢?且看下文分解:
Java知名的日志有很多,比如:JUL、Log4j、JCL、SLF4J、Logback、Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看。
大模型,如chatGPT3.5、GPT-4,国内的文心一言、通义千问、讯飞星火等,对文字工作者,图片、视频工作者的工作效率提升是巨大的,当你学会使用这些工具之后,你的工作和学习效率会大大提升,把其他人甩在身后。
大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。昨天老师跟大家分享了Spring Boot 返回 JSON 数据及数据封装,今天来跟大家分享一下如何使用 SLF4J 进行日志记录。
在Spring项目中使用SLF4J框架非常简单。SLF4J(Simple Logging Facade for Java)是一个日志框架的抽象层,它允许你在项目中使用统一的日志接口,而不用关心具体使用哪个日志实现。
JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框架使用方便,学习简单,能够在小型应用中灵活使用。
📷 👨🎓作者:Java学术趴 🏦仓库:Github、Gitee ✏️博客:CSDN、掘金、InfoQ、云+社区 💌公众号:Java学术趴 🚫特别声明:原创不易,未经授权不得转载或抄袭,如需转载可联系小编授权。 🙏版权声明:文章里的部分文字或者图片来自于互联网以及百度百科,如有侵权请尽快联系小编。微信搜索公众号Java学术趴联系小编。 ☠️每日毒鸡汤:生活是世上最罕见的事情,大多数人只是存在,仅此而已。 👋大家好!我是你们的老朋友Java学术趴,今天继续给大家分享小趴Java日志框架。对于一个应用程序来说
市面上的日志框架: JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j ...
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....
每个系统中都会有个日志,不管你是自己实现的单纯写文件,还是利用多功能的日志框架,大的系统会有相应的日志系统。什么是日志门面?什么是日志框架?SpringBoot 中如何使用日志。
说到日志框架不得不说门面模式。门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为:
对于刚学习编程的同学,很多人都对日志满不在乎,我们在做code review的时候,经常发现一些新同学喜欢一个方法写得很长,然后中间的注释和日志都少的可怜。
Spring Boot对所有的内部日志使用Commons Logging,但是对底层的日志实现是开放的。提供了Java Util Logging、Log4J2和Logback的默认配置。并且会预先配置使用控制台输出,也可以选择文件保存日志记录
初入软件开发这一行的人,可能对日志管理的概念并不是很明确,大概是由于经验所限,以至于根本还考虑不到这个问题。 而从某种意义上来说,日志管理实际上也不需要初入这一行的人来管,他们只需要负责实现自己的主要业务逻辑和功能就好了。 我当初刚入行的时候就有很长一段时间完全不用去关心日志,到后来偶尔涉及到的时候,也都是从其他地方采用cv大法直接搬用。 不过,随着工作时间的变化,随着手头上任务重要程度的变化,也随着接触到的项目数量的变化,让我越来越意识到日志的重要性,它在整个系统中发挥着至关重要的作用! 尤其是涉及到需要后期维护的项目,更是经常需要依靠日志来定位问题,可以说他是运行中的项目出问题时,找问题最好的手段。 java中日志管理的技术有很多,像java自身的java.util.logging,apache的commons-logging,以及slf4j、log4j、logback等等。 其中java.util.logging在日常开发中用的不是很多,用的比较多的后边四个,commons-logging和slf4j是接口,log4j和logback是具体的实现,在我所接触的项目中就用到了这几个。 因为java推荐的就是面向接口编程,所以一般推荐使用的就是那两个接口,但是又由于commons-logging的动态绑定造成了一些问题,因此这两个里边又推荐使用slf4j。 同样的,在两种实现中,logback和log4j是由同一个作者开发,logback出现的更晚,更好,因为也就更推荐用logback。 那么综上而言,目前最推荐的java中的日志管理,就是使用slf4j+logback。 实际上,说了这么多,真正用起来是很简单的,只需要导入相关jar包,写好相关配置,然后需要的地方调用就好了,学习的过程中为了比较不同,我也写了一个简单的额例子。 因为目前大部分的项目都是maven管理,spring框架,所以这个例子中也算是顺便联系spring的最基础配置,就也用了spring。 maven的导包配置pom.xml如下,为了比较这四项技术,所以相关的包我全都导了进来,commons-logging是其他jar依赖的,所以便没有手动再导一次:
Spring Boot在所有内部日志中使用Commons Logging,但是对底层日志的实现是开放的。在Spring Boot生态中,为Java Util Logging 、Log4J2 和Logback 这些常见的日志框架都提供了自动化配置组件,每种Logger都可以通过配置在控制台或者文件中输出日志内容。默认情况下,当我们使用各种Starter的时候,会使用Logback来实现日志管理。
日志框架的出现是为了更好的控制软件运行记录的信息,如果使用大量的System.out.println("")将无法有效的控制输出,市面上常见的日志框架有: JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j…
如果对于commons-loging、log4j、slf4j、LogBack等都已经非常清楚了,可以忽略本文。几次解决日志冲突问题时对这几个概念的简单总结,希望对这块基础没有理解透的同学能有所帮助,当然如果对这块有更深刻理解的同学,也贡献出自己的知识和见解。
Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块:
这个大家可以在官方文档上的源代码就可以看到:https://logback.qos.ch/apidocs/index.html
Logback是由log4j创始人设计的另一个开源日志组件,它当前分为下面下个模块:
Logback是由log4j创始人设计的另一个开源日志组件,Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。
LogBack是一个日志框架,它与Log4j可以说是同出一源,都出自Ceki Gülcü之手。(log4j的原型是早前由Ceki Gülcü贡献给Apache基金会的)下载地址 https://logback.qos.ch/download.html LogBack、Slf4j和Log4j之间的关系 Slf4j是The Simple Logging Facade for Java的简称,是一个简单日志门面抽象框架,它本身只提供了日志Facade API和一个简单的日志类实现,一般常配合Log4j,LogBa
spring boot内部使用Commons Logging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如Java Util Logging,Log4J2还有Logback。
使用过Log4J和LogBack的同学肯定能发现,这两个框架的设计理念极为相似,使用方法也如出一辙。其实这个两个框架的作者都是一个人,Ceki Gülcü,俄罗斯程序员。
今天服务器上报错,想先去看一下日志进行排查,结果发现日志很久都没有输出过了。从上午排查到下午,刚刚解决,因此记录一下,但现在也只是知其然,并不知其所以然,所以如果大家有什么想法请在下方评论。
Spring 框架选择使用了 JCL 作为默认日志输出。而 Spring Boot 默认选择了 SLF4J 结合 LogBack。那我们在项目中该使用哪种日志框架呢?在对于不同的第三方 jar 使用了不同的日志框架的时候,我们该怎么处理呢?
1、Java日志体系(目前常用) slf4j:由log4j的作者开发,本身不替供日志具体实现,只对外提供接口或门面。 logback:slf4j的作者开发的的slf4j的实现,优于log4j。 log4j2:由Apache开发,参考了logback,并做了一些优化。 jdk自带的JUL(java.util.logging)和Apache的JCL(Jakarta Commons Logging)好像不太常用了。 2、slf4j和常用日志实现组件的适配 slf4j + logback:slf4j-api.jar
概述 在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息。 在Java世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子。 我们先来逐一了解一下主流日志工具。 java.util
日志对于一个系统的重要性不言而喻,日志能帮我们快速定位线上问题,市场上存在非常多的日志框架,比较常见的有 JUL,JCL,Log4j,Log4j2,Logback、SLF4j、jboss-logging等。
Log4j是目前最为流行的Java日志框架之一,1999年发布首个版本,2012年发布最后一个版本,2015年正式宣布终止,官方也已不建议使用,并逐步被Logback和Log4j2等日志框架所替代,可是无法掩饰光辉历程,以及优良的设计理念。尽管Log4j有着出色的历史战绩,但早已不是Java日志框架的最优选择,还在使用该日志框架的项目往往是历史遗留问题。
1、根节点<configuration>,包含下面三个属性: scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 例如:
SpringBoot使用Commons Logging进行所有内部日志记录,但底层日志实现保持开放状态。为Java Util Logging,Log4j2和Logback提供了默认配置。
复制来源:java日志组件介绍(common-logging,log4j,slf4j,logback ) common-logging common-logging是apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱。所以使用common-logg
项目中的日志系统使用的是slf4j + logback。slf4j作为一个简单日志门面,为各种loging APIs(像java.util.logging, logback, log4j)提供一个简单统一的接口,有利于维护和各个类的日志处理方式统一。Logback作为一个具体的日志组件,完成具体的日志操作。
【摘要】 对于一个成熟的接口测试框架,日志管理这个是必不可少的。在开发和调试阶段,日志可以帮助我们更快的定位问题;而在测试的运维过程中,日志系统又可以帮助我们记录大部分的异常信息,通常很多测试框架会通过收集日志信息来对接口测试状态进行实时监控预警。
Spring Boot 内部代码使用的是 commons-logging 来记录日志的,但是底层日志实现框架是可以随意替换的。Spring Boot为 Java Util Logging, Log4J2, 和 Logback 日志框架提供了默认配置。
对于一个成熟的接口测试框架,日志管理这个是必不可少的。在开发和调试阶段,日志可以帮助我们更快的定位问题;而在测试的运维过程中,日志系统又可以帮助我们记录大部分的异常信息,通常很多测试框架会通过收集日志信息来对接口测试状态进行实时监控预警。
但是在项目代码中输出的日志信息始终不输出到文件中,只在控制台输出。 一开始我以为是log4j的配置问题:只输出到控制台,不输出到文件,但是反复确认配置没问题。
你是否遇到过配置了日志,但打印不出来的情况?你是否遇到过配置了 logback,启动时却提示 log4j 错误的情况?像下面这样:
基于这个需求,我搜了一下「Android 日志框架」,大多网友推荐的是 logger、timber、xLog 等等,看着也不错。不过出于几年后端开发的经验和习惯,我进一步了解,发现熟悉的 log4j 和 logback 在 Android 上也有人做过适配,所以最终决定使用 slf4j + logback,以在前后端开发中取得一致的体验。
<web-app> 2.5 以前要多个依赖 log4j-web,还需要在web.xml配置listener、filter
common-logging是 apache提供的一个通用的日志接口。用户可以自由选择第三方的日志组件作为具体实现,像log4j,或者jdk自带的logging, common-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。当然,common-logging内部有一个Simple logger的简单实现,但是功能很弱。所以使用common-logging,通常都是配合着log4j来使用。使用它的好处就是,代码依赖是common-logging而非log4j, 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。使用common-logging的常见代码:
今天跟大家分享一篇我比较敬佩的业界大佬—张建飞同学(阿里高级技术专家,cola框架作者)刚新鲜出炉的一篇关于日志实践的文章。大致分享的是如下几点内容:
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
本文的目的是搞清楚Java中各种日志Log之间是怎么的关系,如何作用、依赖,好让我们平时在工作中如果遇到“日志打不出”或者“日志jar包冲突”等之类的问题知道该如何入手解决,以及在各种场景下如何调整项目中的各个框架的日志输出,使得输出统一。
领取专属 10元无门槛券
手把手带您无忧上云