Java Log 学习笔记

news2025/4/24 17:25:48

参考文章:
1.Java 日志从入门到实战
2.Java日志框架的发展历史,你不想了解一下吗

背景

想自定义 logback 配置文件进行日志分级别记录到不同文件,遇到了几个问题(使用的是 spring-boot 构建的项目,spring-boot 版本为 2.7.12):
1.出现如下报错(图1),得知是 logback 版本应该和配置写的 logback-spring.xml 的语法有出入,spring-boot 2.7.12 是通过使用 spring-booot-starter-logging 依赖引入的相关 logback 依赖,想到参考的 logback 官方文档可能和 logback 依赖包版本不一致,所以更新了 logback 依赖包(图2);
图1-logback 版本不匹配
图2-logback 依赖更新到最新版本
2.更新了 logback 版本之后,发现还是报错(图3),好像是缺少实现类的依赖包;图3-logback 缺少实现
发现 Java Log 有点乱,涉及到的东西很多,于是就想系统的学习一下 Java Log。

Java 日志演化历史

1.System.out 与 System.err 记录日志;
2.Log4j:最先出现的是 Apache 的 Log4j(1996年初),是应用最广泛的日志工具,成为了 Java 日志的标准;作者 - Ceki Gülcü;
3.JUL(Java Util Log):Sun 公司在 2002 年 2 月 Jdk1.4 中,增加了 JUL(在 java.util.logging 包下),企图对抗 Log4j,造成 Java 目前记录日志局面的混乱 - 罪魁祸首;

为什么 JUL 的出现会导致开发局面混乱呢?
想象下你的项目应用使用 Log4j,然后使用了一个第三方库,而第三方库使用了 JUL,那么,你的应用就得同时使用 Log4j 和JUL两个日志工具了,然后又有需要使用另外一个第三方库,但是这个第三方库使用了 Log4j 和 JUL 之外的 simplelog。这个时候你的应用里各种 log 工具满天飞,这势必会使你的程序员感到崩溃。因为这些日志工具互相没有关联,替换和统一日志工具也就变成了比较棘手的一件事情。
如何解决这个问题?
使用”适配器“设计模式,把这个问题进行抽象,抽象出一个接口层,对每个日志实现都进行适配,这样这些提供给别人的库都直接使用抽象层即可。

4.JCL(Jakarta Commons Logging):为了搞定这个日常开发比较棘手的问题,Apache 开源社区在 2002 年 8 月推出了日志接口,叫 commons-logging,也被称为 JCL(Java common logging);JCL 对各种日志接口进行抽象,兼容了主流的 Log4j、JUL、simplelog 等日志实现;提供了 JCL 的默认实现 Simple Log;- spring 依赖了 JCL;
5.log4j 的作者 Ceki Gülcü 觉得 JCL 不够优雅,所以开发了更优雅的日志框架 SLF4J (抽象层,简单日志门面(Simple Logging Facade for Java));- 此时 Ceki Gülcü 已离开了 Apache;

但是 slf4j 只是日志接口,之前已经出现的日志产品,如 JUL 和 Log4j 都是没有实现这个接口的,所以 Ceki Gülcü 使用桥接设计方式开发了桥接包,对接 slf4j 和之前的日志实现。

6.logback 的诞生:Ceki Gülcü 觉得目前市场上的日志标准都是间接实现 slf4j 接口的,都需要桥接包,因此开发了 slf4j 的直接实现 logback,性能超越 log4j;
7. 2012 年,Apache 推出新项目 log4j2(完全不兼容 log4j),其也进行了接口和实现的分离设计,分成 log4j-api(日志接口) 和 log4j-core(日志实现);

Java 日志依赖包

1.接口:
JCL
slf4j
log4j-api

2.实现:
JCL 实现:JUL、log4j
slf4j 接口实现:logback
log4j-api 接口实现:log4j-core

3.桥接包:
JCL(接口)-----> jcl-over-slf4j(桥接包)-----> slf4j(接口)
JUL(产品)<----- slf4j-jdk14(桥接包)<----- slf4j(接口)
JUL(产品)-----> jul-to-slf4j(桥接包)-----> slf4j(接口)
log4j(产品)-----> log4j-over-slf4j(桥接包)-----> slf4j(接口)
log4j(产品)<----- slf4j-log4j12(桥接包)<----- slf4j(接口)
JCL(接口)<----- slf4j-jcl(桥接包)<----- slf4j(接口)
log4j-core(产品)<----- log4j-slf4j-impl(桥接包)<----- slf4j(接口)
log4j-api(接口)-----> log4j-to-slf4j(桥接包)-----> slf4j(接口)
JUL(产品)-----> log4j-jul(桥接包)-----> log4j-api(接口)
log4j(产品)-----> log4j-1.2-api(桥接包)-----> log4j-core(产品)
JCL(接口)-----> log4j-jcl(桥接包)-----> log4j-core(产品)

4.推荐记录日志的组合
logback 官方建议配合 slf4j 使用;
logback 主要由三个模块组成:

  1. logback-core:提供 Logback 的核心功能,是另外两个组件的基础;
  2. logback-classic:地位和作用等同于 log4j ,也被认为是 log4j 的改进版,它实现了 slf4j;
  3. logback-access:主要作为一个与 Servlet 容器交互的模块,比如说 tomcat 或者 jetty,提供一些与 HTTP 访问相关的功能;

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

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

相关文章

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前文链接&#xff1a; ​​开源可观测性平台Signoz系列&#xff08;一&#xff09;【开篇】​​ ​​开源可观测性平台Signoz&…

记录一下imx6ull linux 5.10.9多点电容触摸屏驱动报错问题解决方法

最近再研究如何将linux 5.10.9移植到imx6ull&#xff0c;用的原子的开发板&#xff0c;在移植电容触摸屏驱动时报错gpio gpiochip0: (209c000.gpio): gpiochip_lock_as_irq: tried to flag a GPIO set as output for IRQ&#xff0c;如下图&#xff1a; 该错误的意思就是尝试将…

MongoDB Certified Associate Developer 认证考试心得

介绍 前段时间通过了 MongoDB Associate Developer 考试&#xff0c;也记下了一些心得&#xff0c;结果忘记发出来了&#xff0c;现在重新整理下。通过考试后证书是这样的: MongoDB 目前有两个认证证书 1. MongoDB Associate Developer 认证掌握使用MongoDB 来构建现代应用…

前端八股文(工程化篇)

目录 1.常用的git命令有哪些&#xff1f; 2.git rebase和git merge的区别 3.有哪些常见的Loader和Plugin&#xff1f; 4.webpack的构建流程 5.bundle,chunk,module是什么&#xff1f; 6.如何提高webpack的打包速度 7.vite比webpack快在哪里 8.说一下你对Monorepo的理解 …

EOS开发Ubuntu安装EOSIO.CDT(Install the EOSIO.CDT)

EOS开发Ubuntu安装EOSIO.CDT&#xff08;Install the EOSIO.CDT&#xff09; EOSIO.CDT介绍&#xff1a;EOSIO合约开发工具包&#xff0c;简称CDT&#xff0c;是与合约编译相关的工具集合。而且后续教程主要使用 CDT 来编译合约和生成 ABI&#xff0c;不要忽略。 刚才我们安装好…

欢迎来到Web3.0的世界:Solidity智能合约安全漏洞分析

智能合约概述 智能合约是运行在区块链网络中的一段程序&#xff0c;经由多方机构自动执行预先设定的逻辑&#xff0c;程序执行后&#xff0c;网络上的最终状态将不可改变。智能合约本质上是传统合约的数字版本&#xff0c;由去中心化的计算机网络执行&#xff0c;而不是由政府…

汽车制造厂批量使用成华制造弹簧平衡器

数年来&#xff0c;成华制造都在不断的向各行各界输出着自己的起重设备&#xff0c;与众多企业达成合作&#xff0c;不断供应优质产品。近些年&#xff0c;成华制造以其卓越的产品质量和高效的生产能力&#xff0c;成功实现了弹簧平衡器的大规模批量供应&#xff0c;为重庆数家…

【开源】基于Vue+SpringBoot的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

【Vue2+3入门到实战】(16)VUEVue路由的重定向、404、编程式导航、path路径跳转传参 详细代码示例

目录 一、Vue路由-重定向1.问题2.解决方案3.语法4.代码演示 二、Vue路由-4041.作用2.位置3.语法4.代码示例 三、Vue路由-模式设置1.问题2.语法 四、编程式导航-两种路由跳转方式1.问题2.方案3.语法4.path路径跳转语法5.代码演示 path跳转方式6.name命名路由跳转7.代码演示通过n…

工程(十七)——自己数据集跑R2live

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。 r2live是比较早的算法&#xff0c;编译过程有很多问题&#xff0c;通过以下两个博客可以解决 编译R2LIVE问题&解决方法-CSDN博客 r2live process has died 问题解决了_required process …

优化算法3D可视化

编程实现优化算法&#xff0c;并3D可视化 1. 函数3D可视化 分别画出 和 的3D图 import numpy as np from matplotlib import pyplot as plt import torch# 画出x**2 class Op(object):def __init__(self):passdef __call__(self, inputs):return self.forward(inputs)def for…

【软考】系统集成项目管理工程师【总】

引言 本来整理这篇文章的目的是方便自己23年考试用的 效果不错 目标完成。 接下来的目标是把这篇文章 做成参加该软考 小伙伴的唯一参考资料&#xff08;有它就够了&#xff09;来持续更新。。。 这篇文章我将当作一个长周期&#xff08;以年为单位&#xff09;项目运维起来&am…

【Web】vulhub-httpd apache解析漏洞复现(1)

目录 ①CVE-2017-15715 ②apache_parsing_vulnerability ①CVE-2017-15715 贴出源码&#xff1a; <?php if(isset($_FILES[file])) {$name basename($_POST[name]);$ext pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, [php, php3, php4, php5, phtml, pht]))…

linux常见基础指令

入门常见基础指令 ls、stat、 pwd 、cd、tree、 whoami、 touch、 mkdir、 rm 、 man、 cp、mv、cat、tac、echo、>、 >>、 < 、more、 less、 head、 tail、date、 cal、 find、 which、alias、whereis、grep、zip与unzip、 tar、bc、uname、xargs... 热键Tab、…

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解

时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解 目录 时序分解 | Matlab实现贝叶斯变化点检测与时间序列分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现贝叶斯变化点检测与时间序列分解 1.Matlab实现贝叶斯变化点检测与时间序列分解&#xff0c;完…

STM32——通用计时器

通用计时器框图 1.时钟源 1&#xff09;内部时钟(CK_INT) 2&#xff09;外部时钟模式 1&#xff1a;外部输入引脚(TIx)&#xff0c;x1&#xff0c;2&#xff08;即只能来自于通道 1 或者通道 2&#xff09; 3&#xff09;外部时钟模式 2&#xff1a;外部触发输入(ETR) 4&#…

【面试】 Maven 的八大核心概念

Maven 的八大核心概念 在这里&#xff0c;举出这个标题&#xff0c;自然大家知道Maven是干啥的&#xff0c;就不过多进行赘述&#xff01;我们主要对于Maven的八大核心概念做一个解释补充&#xff0c;这也是我自己的一个学习历程&#xff0c;我们一起共勉&#xff01; 文章概述…

STM32实战之IAP代码升级

目录 1 IAP介绍 2 内存分区 3 整体设计流程图 4 Boot Loader的代码编写 5 APP1代码编写 6 APP2代码编写 stm32内部flash操作相关函数 1 IAP介绍 IAP&#xff08;In Application Programming&#xff09;即在应用编程&#xff0c; IAP 是用户自己的程序在运行过程中…

大创项目推荐 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

HCIA-Datacom题库(自己整理分类的)——ARP协议【完】

一、单选 1.ARP 属于哪一层协议&#xff1f; 数据链路层 网络层 物理层 传输层 2.ARP请求是____发送的 点播 广播 组播 单播 关于ARP报文的说法错误的是? ARP请求报文是广播发送的 ARP报文不能被转发到其他广播域 ARP应答报文是单播方发送的 任何链路层协议都需…