Java Log 学习笔记

参考文章:
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.rhkb.cn/news/227899.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多模态大模型-CogVLm 论文阅读笔记

多模态大模型-CogVLm 论文阅读笔记 COGVLM: VISUAL EXPERT FOR LARGE LANGUAGEMODELS 论文地址 :https://arxiv.org/pdf/2311.03079.pdfcode地址 : https://github.com/THUDM/CogVLM时间 : 2023-11机构 : zhipuai,tsinghua关键词: visual language model效果:&#xff08;2023…

MySQL基础入门(二)

多表内容 一对多 这个内容是黑马的入门问题&#xff0c;可以带大家思考一下这个怎么设计 我们要知道一个岗位可以对应很多用户&#xff0c;而一个用户只能对应一个岗位&#xff0c;这就属于一对多的类型 那么我们需要怎么将他们进行关联呢&#xff1f; 现在我们可以通过一个…

蓝桥杯C/C++程序设计——单词分析

题目描述 小蓝正在学习一门神奇的语言&#xff0c;这门语言中的单词都是由小写英文字母组 成&#xff0c;有些单词很长&#xff0c;远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词&#xff0c;他准备不再完全记忆这些单词&#xff0c;而是根据单词中哪个字母出…

Zookeeper 实战 | Zookeeper 和Spring Cloud相结合解决分布式锁、服务注册与发现、配置管理

专栏集锦&#xff0c;大佬们可以收藏以备不时之需&#xff1a; Spring Cloud 专栏&#xff1a;http://t.csdnimg.cn/WDmJ9 Python 专栏&#xff1a;http://t.csdnimg.cn/hMwPR Redis 专栏&#xff1a;http://t.csdnimg.cn/Qq0Xc TensorFlow 专栏&#xff1a;http://t.csdni…

Media Encoder各版本安装指南

Media Encoder 链接地址如下&#xff1a; https://pan.baidu.com/s/1qOowHfm9rhrOOMljYgQCsA?pwd0531 1.鼠标右击【ME2023(64bit)】压缩包选择&#xff08;win11系统需先点击“显示更多选项”&#xff09;【解压到 ME2023(64bit)】。 2.打开解压后的文件夹&#xff0c;鼠标右…

16.综合项目实战

一、基础演练&#xff1a; 1、建库、建表 # 创建数据库 create database mysql_exampleTest; use mysql_exampleTest; # 学生表 CREATE TABLE Student( s_id VARCHAR(20), s_name VARCHAR(20) NOT NULL DEFAULT , s_birth VARCHAR(20) NOT NULL DEFAULT , s_sex VARC…

分布式存储考点梳理 + 高频面试题

欢迎来到分布式存储模环节&#xff0c;本文我将和你一起梳理面试中分布式系统的数据库的高频考点&#xff0c;做到温故知新。 面试中如何考察分布式存储 广义的分布式存储根据不同的应用领域&#xff0c;划分为以下的类别&#xff1a; 分布式协同系统 分布式文件系统 分布式…

运行时错误‘53’文件未找到:MathPage.WLL,安装MathType后Word不能复制粘贴问题的解决

两步解决&#xff1a; 1. 打开Word-->文件-->选项-->信任中心-->信任中心设置-->受信任位置&#xff0c;解决宏问题 添加如下受信任位置&#xff0c; 我的路径&#xff1a;C:\Program Files\Microsoft Office\root\Office16\STARTUP\ 2. 找到MathType下的MathT…

GitHub 一周热点汇总 第3期 (2023/12/24-12/30)

GitHub一周热点汇总第三期 (2023/12/24-12/30)&#xff0c;梳理每周热门的GitHub项目&#xff0c;了解热点技术趋势&#xff0c;掌握前沿科技方向&#xff0c;发掘更多商机。元旦就要到了&#xff0c;提前祝大家新年快乐。 #1 StreamDiffusion 项目名称&#xff1a;StreamDiff…

安装kafka

静态文件安装&#xff08;单机&#xff09; 解压到指定目录&#xff08;解压到 /usr&#xff09; tar -zxf kafka_2.11-2.2.0.tgz -C /usr/ 到指定的解压目录下 cd /usr/kafka_2.11-2.2.0/ 配置主机名 查看是否配置了HOSTNAME vim /etc/sysconfig/network 没有就新增 HOSTNA…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理

深入浅出图解C#堆与栈 C# HeapingVS Stacking第二节 栈基本工作原理 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.cs…

“从零到一“基于Freeswitch二次开发: 应用架构设计(二)

一、架构分享 上一篇文章“从零到一“基于Freeswitch二次开发:Freeswitch入门与网络架构 (一) 对Freeswitch二次开发做了一个介绍&#xff0c;距离这篇文章的发布时间有点久了&#xff0c;之前一直没时间把下文补上来。正好到了年末想起来&#xff0c;就把我们的一个实现架构进…

微服务系列之分布式事务理论

概述 事务是由一组操作构成的可靠的独立的工作单元&#xff0c;事务具备ACID的特性&#xff0c;即原子性、一致性、隔离性和持久性。 分类 大多数情况下&#xff0c;分类是没有意义的一件事。但是分类可以一定程度上&#xff0c;加深理解。 实现 从实现角度来看&#xff0…

软件测试/测试开发丨Python 面向对象编程思想

面向对象是什么 Python 是一门面向对象的语言面向对象编程&#xff08;OOP&#xff09;&#xff1a;Object Oriented Programming 所谓的面向对象&#xff0c;就是在编程的时候尽可能的去模拟真实的现实世界&#xff0c;按照现实世界中的逻辑去处理问题&#xff0c;分析问题中…

【ONE·MySQL || 数据类型 表的约束】

总言 主要内容&#xff1a;介绍MySQL中的常见数据类型&#xff08;数值类型、文本二进制类型、时间日期、字符串类型&#xff09;&#xff0c;以及对表的约束&#xff08;非空约束、默认约束、列描述、零填充约束、自增长约束、主键约束、唯一键约束、外键约束&#xff09;。  …

x-cmd pkg | openssl - 密码学开源工具集

目录 简介首次用户技术特点竞品分析进一步阅读 简介 OpenSSL 是一个开源的密码库和 SSL/TLS 协议实现&#xff0c;它提供了一组密码学工具和加密功能&#xff0c;用于保护数据通信的安全性。项目发展历史可以追溯到 1998 年&#xff0c;源自 Eric A. Young 和 Tim J. Hudson 开…

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信 文章目录 用Python搭建简易的CS架构并通信前言一、基本结构二、代码编写1.服务器端2.客户端 三、效果展示总结 前言 本文主要是用Python写一个CS架构的东西&#xff0c;包括服务器和客户端。程序运行后在客户端输入消息&#xff0c;服务器端会…

计算机视觉技术-目标检测数据集

目标检测领域没有像MNIST和Fashion-MNIST那样的小数据集。 为了快速测试目标检测模型&#xff0c;我们收集并标记了一个小型数据集。 首先&#xff0c;我们拍摄了一组香蕉的照片&#xff0c;并生成了1000张不同角度和大小的香蕉图像。 然后&#xff0c;我们在一些背景图片的随机…

【网络安全】网络隔离设备

一、网络和终端隔离产品 网络和终端隔离产品分为终端隔离产品和网络隔离产品两大类。终端隔离产品一般指隔离卡或者隔离计算机。网络隔离产品根据产品形态和功能上的不同&#xff0c;该类产品可以分为协议转换产品、网闸和网络单向导入产品三种。 图1为终端隔离产品的一个典型…

46、激活函数 - Relu 激活

本节介绍一个在神经网络中非常常见的激活函数 - Relu 激活函数。 什么是ReLU激活函数 ReLU 英文名为 Rectified Linear Unit,又称修正线性单元,是一种简单但很有效的激活函数,它的定义如下: 即当输入 x 大于零时,输出等于他自己;当输入小于等于零时,输出为零,下面是re…