Java日志框架的纷争演进与传奇故事

news2024/9/24 9:23:41

在Java的世界里,日志记录是每一个应用不可或缺的部分。它帮助开发者了解应用的运行状态、调试问题、监控性能等。而在这背后,是一系列日志框架的发展与演进。今天,就让我们一起回顾这些日志框架的历史,探寻它们背后的故事。

在这里插入图片描述

1. Log4j:日志的起点

时间回到1996年,欧洲安全电子市场(EU SEMPER)项目正进行得如火如荼。项目组成员意识到,他们需要一个强大的程序跟踪API来辅助开发。这就是Log4j的雏形。经过不断的迭代和完善,Log4j逐渐崭露头角,成为了Java社区中炙手可热的日志框架。

值得一提的是,Log4j的作者是Ceki Gülcü。后来,他将这一心血结晶捐献给了Apache软件基金会,使其成为了开源世界的一部分。Log4j的影响力逐渐扩散,不仅支持Java,还衍生出了支持C、C++、C#、Perl、Python、Ruby等语言的版本。

2. Logback:传承与创新

然而,故事并没有因此而结束。Ceki Gülcü在离开Apache后,并没有停下对日志框架的探索。他创建了Logback,一个旨在替代Log4j的日志框架。Logback不仅继承了Log4j的优点,还引入了诸多创新特性,如自动重新加载配置文件、优雅的日志级别继承等。

更值得一提的是,Logback完全实现了SLF4J API。SLF4J(Simple Logging Facade for Java)是一个日志抽象层,它允许开发者在代码中使用统一的日志接口,而在运行时选择具体的日志实现。这一设计使得Logback与其他日志框架的集成变得更加灵活和方便。

3. java.util.logging:官方的尝试

在Log4j和Logback蓬勃发展的同时,Java官方也没有闲着。从Java 1.4版本开始,官方引入了自己的日志框架——java.util.logging(简称JUL)。JUL提供了基本的日志功能,但对于习惯了Log4j的开发者来说,它的配置显得过于复杂,功能也相对有限。因此,JUL并没有像Log4j那样广泛流行起来。

4. Log4j2:新时代的选择

随着时间的推移,技术不断进步。Log4j虽然经典,但也逐渐暴露出一些问题和限制。为了应对这些挑战,Apache软件基金会推出了Log4j的升级版——Log4j2。Log4j2在性能、扩展性和功能上都有了显著的提升。它引入了异步日志记录器、插件化架构等特性,使得日志记录更加高效和灵活。同时,Log4j2还修复了Logback架构中的一些固有问题,并提供了更多的新特性和改进。这使得Log4j2成为了新时代的日志框架选择。

5. Tinylog:轻量级的选择

除了这些主流的日志框架外,还有一些轻量级的日志框架值得一提。其中,Tinylog就是一个典型的代表。Tinylog定位于简单、快速和易于使用的日志记录功能。它适合于小型项目和简单的日志需求,具有较小的内存占用和快速的执行速度。虽然Tinylog在国内的资料相对较少,但它在国际上有一定的知名度和用户群体。对于追求轻量级和简洁性的开发者来说,Tinylog是一个不错的选择。

结语

回顾Java日志框架的演进历程,我们不禁感叹技术的飞速发展。从Log4j的起点到Logback的创新再到Log4j2的新时代选择以及Tinylog的轻量级尝试,每一个日志框架都留下了自己的印记和故事。在未来的日子里,我们期待更多的日志框架涌现出来为Java社区注入新的活力。

日志江湖的故事也还在继续,新的框架和技术也在不断涌现。无论是开山鼻祖Log4j,还是新时代的武林盟主Log4j2,亦或是轻装上阵的独行侠Tinylog,它们都在为开发者们提供更好的日志记录体验而努力着。让我们拭目以待,看看日志江湖的下一位风云人物会是谁吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1490051.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式数据库中全局自增序列的实现

自增序列广泛使用于数据库的开发和设计中,用于生产唯一主键、日志流水号等唯一ID的场景。传统数据库中使用Sequence和自增列的方式实现自增序列的功能,在分布式数据库中兼容Oracle和MySQL等传统数据库语法,也是基于Sequence和自增列的方式实现…

使用Visual Studio 2022 创建lib和dll并使用

概述:对于一个经常写javaWeb的人来说,使用Visual Studio似乎没什么必要,但是对于使用ffi的人来说,使用c或c编译器,似乎是必不可少的,下面我将讲述如何用Visual Studio 2022 来创建lib和dll,并使用。 静态库…

UNIapp实现局域网内在线升级

首先是UNIapp 生成apk 用Hbuilder 进行打包 可以从网站https://www.yunedit.com/reg?gotocert 使用自有证书,目测比直接使用云证书要快一些。 发布apk 网站 用IIS发布即可 注意事项中记录如下内容 第一、需要在 iis 的MiMe 中添加apk 的格式,否则无法…

Java架构之路-架构应全面了解的技术栈和工作域

有时候我在想这么简单简单的东西,怎么那么难以贯通。比如作为一个架构师可能涉及的不单单是技术架构,还包含了项目管理,一套完整的技术架构也就那么几个技术栈,只要花点心思,不断的往里面憨实,总会学的会&a…

UE4升级UE5 蓝图节点变更汇总(4.26/27-5.2/5.3)

一、删除部分 Ploygon Editing删除 Polygon Editing这个在4.26、4.27中的插件,在5.1后彻底失效。 相关的蓝图,如编辑器蓝图 Generate mapping UVs等,均失效。 如需相关功能,请改成Dynamic Mesh下的方法。 GetSupportedClass删…

在K8S集群中部署SkyWalking

1. 环境准备 K8S 集群kubectlhelm 2. 为什么要部署SkyWalking? 我也不道啊,老板说要咱就得上啊。咦,好像可以看到服务的各项指标,像SLA,Apdex这些,主要是能够进行请求的链路追踪,bug排查的利…

C向C++的一个过渡

思维导图 输入输出,以及基础头文件 在c语言中我们常用scanf("%d",&n);和printf("%d\n",n);来输出一些变量和常量,在C中我们可以用cin;和cout;来表示输入输出。 在C语言中输入输出有头文件,在C也有头文件&#xff0…

解放人力,提升品质:码垛输送机的工业应用与价值

在现代工业生产中,码垛输送机已成为许多企业自动化生产线上的关键设备。它不仅可以提高生产效率,降低人力成本,还能确保产品质量,并为企业带来许多其他方面的实际好处。 1. 提高生产效率: 快速码垛:码垛输…

蓝桥杯练习题——dp

五部曲(代码随想录) 1.确定 dp 数组以及下标含义 2.确定递推公式 3.确定 dp 数组初始化 4.确定遍历顺序 5.debug 入门题 1.斐波那契数 思路 1.f[i]:第 i 个数的值 2.f[i] f[i - 1] f[i - 2] 3.f[0] 0, f[1] 1 4.顺序遍历 5.记得特判 …

基于springboot+vue的医院药品管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程

STM32CubeIDE基础学习-新建STM32CubeIDE基础工程 前言 有开发过程序的朋友都清楚,后面开发是不需要再新建工程的,一般都是在初学时或者有特殊需要的时候才需要新建项目工程的。 后面开发都是可以在这种已有的工程上添加相关功能就行,只要前…

Linux系统部署Discuz论坛并发布至公网随时随地可远程访问

目录 ​编辑 前言 1.安装基础环境 2.一键部署Discuz 3.安装cpolar工具 4.配置域名访问Discuz 5.固定域名公网地址 6.配置Discuz论坛 结语 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊Linux系统部署Discuz论坛并发布至公网随时随地…

Qt+FFmpeg+opengl从零制作视频播放器-1.项目介绍

1.简介 学习音视频开发,首先从做一款播放器开始是比较合理的,每一章节,我都会将源码贴在最后,此专栏你将学习到以下内容: 1)音视频的解封装、解码; 2)Qtopengl如何渲染视频&#…

matlab 提取分割位于多边形区域边缘内部或边缘上的点

[in,on] = inpolygon(xq,yq,xv,yv) xv 和 yv 为定义的多边形区域的,如xv = [1 4 4 1 1 ];yv = [1 1 4 4 1 ];注意最后一个数字与第一个重复,保证多边形闭合; xq 和 yq 为待查询的点in:在多边形内部和边缘的点序号on:仅在多边形边缘的点序号 提取分割方法: matrix=[xq yq…

Hystrix的一些了解

Hystrix如何实现容错 Hystrix是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避 免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。 通常对于使用微服务架构开发的系统,涉及到…

12. Nginx进阶-Location

简介 Nginx的三大区块 在Nginx中主要配置包括三个区块,结构如下: http { #协议级别include /etc/nginx/mime.types;default_type application/octet-stream;log_format main $remote_addr - $remote_user [$time_local] "$r…

13-Java代理模式 ( Proxy Pattern )

Java代理模式 摘要实现范例 代理模式(Proxy Pattern)使用一个类代表另一个类的功能 代理模式创建具有现有对象的对象,以便向外界提供功能接口 代理模式属于结构型模式 摘要 1. 意图 为其他对象提供一种代理以控制对这个对象的访问2. 主…

游戏引擎用什么语言开发上层应用

现在主流的游戏引擎包括: 1、Unity3D,C#语言,优点在于支持几乎所有平台 丹麦创立的一家公司,现已被微软收购。在中国市场占有率最高,也是社群很强大,一般解决方案也能在网上找到,教程丰富。物理…

springboot项目单纯使用nacos注册中心功能

Spring Boot 项目完全可以单独使用 Nacos 作为注册中心。Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它支持服务的注册与发现,能够与 Spring Boot 应用无缝集成,为微服务架构提供了强大的支持。 在使用 Nacos 作为注册中…

eclipse搭建java web项目

准备条件 eclipsejdk1.8 (配置jdk环境)apache-tomcat-8.5.97(记住安装位置) 一 点击完成 开始创建javaweb项目 import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.s…