java 打印日志的几种方式

java 打印日志的几种方式

    • Java 日志框架进化史
      • 日志门面与日志系统
    • Log4j+slf4j
    • Log4j2+slf4j
    • Logback+slf4j

一、先简单介绍五种
(1)最简单的方式,就是system.println.out(error) ,这样直接在控制台打印消息了;
(2)Java.util.logging ; 在JDK 1.4 版本之后,提供了日志的API ,可以往文件中写日志了;
(3)Log4j , 最强大的记录日志的方式。 可以通过配置 .properties 或是 .xml 的文件, 配置日志的目的地,格式等等,
为了维护在 Java 日志江湖的地位,防止 JCL、Log4j 被 Slf4j、Logback 组合取代 ,2014 年 Apache 推出了 Log4j 2。
(4)commons-logging, 最综合和常见的日志记录方式, 经常是和log4j (或log4j 2)结合起来使用;
(5)Logback是java的日志开源组件,是log4j创始人写的,性能比log4j要好;

Java 日志框架进化史

在开发过程中,工程师不得不面对一个很现实的问题:Java “混乱”的日志框架体系。为什么说“混乱”呢?原因在于早期 Java 日志框架没有制定统一的标准,使得很多应用程序会同时使用多种日志框架。Java 日志框架的发展历程大致可分为图 1 所示的几个阶段:
在这里插入图片描述

日志门面与日志系统

在上文中已经提及,目前常用的日志框架有 Log4j,Log4j 2,Commons Logging,Slf4j,Logback,JUL。这些日志框架可以分为两种类型:门面日志和日志系统。

日志门面:只提供日志相关的接口定义,即相应的 API,而不提供具体的接口实现。日志门面在使用时,可以动态或者静态地指定具体的日志框架实现,解除了接口和实现的耦合,使用户可以灵活地选择日志的具体实现框架。
日志系统:与日志门面相对,它提供了具体的日志接口实现,应用程序通过它执行日志打印的功能。
在这里插入图片描述
以下主要讲和和slf4j搭配使用
主要原因如下:

log4j、log4j2、Logback是一个日志框架,slf4j是日志框架接口,
之所以和slf4j搭配使用是为了以后如果项目对日志有其它要求而需要更换日志框架时可以不改动代码,只需要把依赖的jar包换掉就可以了。

Log4j+slf4j

需要的依赖

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.25</version>
</dependency>
<!-- (桥接包-为log4j和slf4j建立桥接依赖)-->
<dependency>
   	<groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.25</version>  
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

Log4j2+slf4j

需要的依赖

    <dependencies>
        <!-- Log4j2 门面API-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!-- Log4j2 日志实现 -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.11.1</version>
        </dependency>
        <!--使用slf4j作为日志的门面,使用log4j2来记录日志 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <!--为slf4j绑定日志实现 log4j2的适配器 (桥接包-为log4j2和slf4j建立桥接依赖)-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <version>2.10.0</version>
        </dependency>
    </dependencies>

Logback+slf4j

注意:由于logback出现在slf之后,它内部已经实现了StaticLoggerBinder这个类,所以不需要桥接包;而log4j、log4j2没有实现StaticLoggerBinder类,所以需要额外通过桥接包来实现该功能。

需要的依赖

   <dependencies>  
  <!-- slf4j-api -->  
  <dependency>  
    <groupId>org.slf4j</groupId>  
    <artifactId>slf4j-api</artifactId>  
    <version>1.7.30</version>  
  </dependency>  
    
  <!-- logback-classic -->  
  <dependency>  
    <groupId>ch.qos.logback</groupId>  
    <artifactId>logback-classic</artifactId>  
    <version>1.2.3</version>  
  </dependency>  
    
  <!-- logback-core -->  
  <dependency>  
    <groupId>ch.qos.logback</groupId>  
    <artifactId>logback-core</artifactId>  
    <version>1.2.3</version>  
  </dependency>  
</dependencies>

参考链接:
【1】java的三种日志实现方式
https://blog.csdn.net/lizzehqs/article/details/126359289
【2】Java 日志系列(一):详解主流日志框架Log4j、Log4j 2、JUL、Commons Logging和Slf4j&Logback
https://blog.csdn.net/Jin_Kwok/article/details/132795294?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-132795294-blog-126359289.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-132795294-blog-126359289.235%5Ev40%5Epc_relevant_3m_sort_dl_base1&utm_relevant_index=2

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python实现Ethernet/IP协议的客户端(二)

Ethernet/IP是一种工业自动化领域中常用的网络通信协议&#xff0c;它是基于标准以太网技术的应用层协议。作为工业领域的通信协议之一&#xff0c;Ethernet/IP 提供了一种在工业自动化设备之间实现通信和数据交换的标准化方法。python要实现Ethernet/IP的客户端&#xff0c;可…

自学软件测试?一般人我劝你回头是岸。。。

本人7年测试经验&#xff0c;在学测试之前对电脑的认知也就只限于上个网&#xff0c;玩个办公软件。这里不能跑题&#xff0c;我为啥说&#xff1a;自学软件测试&#xff0c;一般人我还是劝你算了吧&#xff1f;因为我就是那个一般人&#xff01; 软件测试基础真的很简单&…

单片机开发--keil5

一.keil5 Keil uVision5是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于对嵌入式系统中的微控制器进行编程。它是一个软件套件&#xff0c;包括源代码编辑器、项目经理、调试器以及微控制器开发、调试和编程所需的其他工具。Keil uVision5 IDE主要用于对基于A…

SpringBootWeb请求响应

请求 简单参数 在向服务器发起请求时&#xff0c;向服务器传递的是一些普通的请求数据。 原始方式知道原理即可&#xff0c;实际开发不会采用 在原始的Web程序当中&#xff0c;需要通过Servlet中提供的API&#xff1a;HttpServletRequest&#xff08;请求对象&#xff09;…

IP tables防火墙(一)

本章主要介绍&#xff1a; 熟悉Linux防火墙的表&#xff0c;链的结构理解数据包匹配的基本流程学会编写IP tables规则 1.0防火墙基础 在 Internet 中&#xff0c;企业通过架设各种应用系统来为用户提供各种网络服务&#xff0c;如 Web 网站、电子邮件系统、FTP 服务器、数…

eureka注册列表 某服务出现多个服务实例

最近文件导出功能偶发成功&#xff0c;大部分情况都失败&#xff0c;开始以为接口被拦截&#xff0c;gateway服务没有接口调用日志&#xff0c;发现测试环境可以&#xff0c;正式环境功能无法正常使用。 偶然看到注册中心如下 发现file服务有3个实例&#xff0c;调用接口将错误…

【OpenCV】OpenCV:计算机视觉的强大工具库

摘要   OpenCV是一个广泛应用于计算机视觉领域的开源工具库&#xff0c;为开发者提供了丰富的图像处理和计算机视觉算法。本文将介绍OpenCV的功能和应用领域&#xff0c;并探讨它在实践中的重要性和前景。 计算机视觉的强大工具库 一、什么是OpenCV&#xff1f;二、OpenCV的功…

Spring04

一、AOP的概念 AOP 为 (Aspect Oriented Programming) 的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;底层是使用动态代理的技术实现对目标方法的增强和控制访问等功能。 其中AOP中有几个重要的概念: 1、通知:增强的逻辑&#xff0c;或者后期要加入的代码。 2、目…

介绍混沌工程的主要作用是什么?

混沌工程是一种通过有序的混沌实验来提高系统稳健性和可靠性的实践。它不仅有助于发现问题&#xff0c;更能够促使团队建立起一种主动预防和处理问题的文化&#xff0c;从而为复杂系统的管理提供了全新的视角。本文将介绍混沌工程的主要作用&#xff1a; 发现系统脆弱性&#x…

中国社科院与新加坡新跃社科大联合培养博士——读博就业前景

现在国家高度重视高素质人才的培养&#xff0c;硕士和博士人数增多。很多人想要走学术道路&#xff0c;想要做自己喜欢领域的科研&#xff0c;不过也有很多人希望通过高学历获得更高的薪资待遇。根据一些数据表明我国每年的博士人数都在五万或六万左右。2018年的博士毕业生总人…

MidTool图文创作-GPT-4与DALL·E 3的结合

GPT-4与DALLE 3的结合 GPT-4是由OpenAI开发的最新一代语言预测模型&#xff0c;它在前代模型的基础上进行了大幅度的改进&#xff0c;不仅在文本生成的连贯性、准确性上有了显著提升&#xff0c;还在理解复杂语境和执行多步骤指令方面表现出了更高的能力。而DALLE 3则是一个创…

Mysql的主从复制和读写分离

一.主从复制 主从复制的作用&#xff1a; 读写分离 读写分离 具有高可用性 主从复制的工作过程&#xff1a; 主服务器master发生数据变化时&#xff0c;会记录到二进制日志中&#xff1b;从服务器slave会开启io线程请求二进制日志事件&#xff1b;主服务器会为每个io线程…

QT登录功能开发

登录功能 1选择无按钮的dialog 2登录函数 #include <QApplication> #include <QDialog> #include <QFormLayout> #include <QLineEdit> #include <QPushButton> #include <QMessageBox>class LoginDialog : public QDialog { public:Log…

SpringIOC之support模块ConversionServiceFactoryBean

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

three.js 多通道组合

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div style"border: 1px so…

PASCAL VOC数据集

官方页面&#xff1a; 官方网址&#xff1a; The PASCAL Visual Object Classes Challenge 2012 (VOC2012) (ox.ac.uk) 数据集下载&#xff1a; 类别&#xff1a; 数据集结构&#xff1a;voc2012 test数据集不公开 标注自己的目标检测数据集&#xff1a; Make Sensehttps:…

javafx

JavaFX JavaFX简介 JavaFX是一个用于创建富客户端应用程序的图形用户界面&#xff08;GUI&#xff09;框架。它是Java平台的一部分&#xff0c;从Java 8开始成为Java的标准库。 JavaFX提供了丰富的图形和多媒体功能&#xff0c;使开发人员能够创建具有吸引力和交互性的应用程…

【数据结构】堆的实现及TOP-K问题

文章目录 前言1. 堆的概念及结构2. 堆的实现2.1 堆向上调整算法2.2 堆向下调整算法2.3 堆的创建2.4 堆的删除2.5 堆的常用接口代码实现 3. 堆的应用TOP-K问题 前言 在正式讲堆之前&#xff0c;我们要先来讲一下二叉树的顺序结构&#xff1a; 普通的二叉树是不适合用数组来存储…

认识机器学习【woodwhales.cn】

为了更好的阅读体验&#xff0c;建议移步至笔者的博客阅读&#xff1a;认识机器学习 生活中的问题1&#xff1a;居民家庭生活用气价格 北京燃气小程序在线咨询&#xff0c;查询北京居民家庭生活用气价格 上图价格梯度&#xff0c;可以由文字转换成表格&#xff1a; 第一档用气…

【Matlab】LSTM长短期记忆神经网络时序预测算法(附代码)

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88688439 一&#xff0c;概述 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种常用的循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;结构&#xff0c;由于其对于…