logback日志框架学习(1)介绍logback

news2024/11/16 0:47:22

首先说下对日志框架的感受,很多人slf4j-api slf4j-simple
logback-core logbak-classic log4j logj42很多的日志框架,控制台各种输出的时候日志框架warn error,有时候还不能输出日志。究其原因,大家都觉得日志框架不太重要,反正能输出就行了,感觉和sout也差不多,我也是这样的想法…出了问题百度下,复制两个log4j.properties ,log4j.xml就好了,下次有问题继续cv。不想这样了,我要好好学习下日志框架,希望大家也能好好学习。

官网

https://logback.qos.ch/manual/introduction.html
官网永远是学习的最好地方。
可以看到官网分了13章,我觉得看完就差不多

引入maven

在这里插入图片描述
requirements,说明这里是必备的。 他说logback-classic模块需要slf4j-api.jar 和logback-core.jar还有logback-classic.jar。那么我们需要引入这3个jar吗?
看到下面一段,说的是slf4j-api.jar其实就在logback-*jar里有。所以我们只需要引入2个jar。(我感觉slf4j-api是接口,logback是实现类)

        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>

此时通过idea查看我们具体的引入
logback-classic包含了logback-core和slf4j-api
是不是意味着我只引入logback-classic就好了?后面测试。

HelloWorld1

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld1 {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld1");
        logger.debug("Hello world.");
    }
}

此时我还没配置xml,properties就可以自己打印日志了。
在这里插入图片描述经过测试只有classic包也是可以的。当然你要注意版本,万一高版本和低版本可能没有core包。
看下官网文档给这个demo的说明

HelloWorld1 class is defined in the chapters.introduction package. It starts by importing the Logger and LoggerFactory classes defined in the SLF4J API, specifically within the org.slf4j package.

这里说了logger的由来,通过引入slf4j的api,注意这里并没有引入logback的api,
这里就是我之前提到的slf4j是接口,logback是实现类。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

On the first line of the main() method, the variable named logger is assigned a Logger instance retrieved by invoking the static getLogger method from the LoggerFactory class. This logger is named “chapters.introduction.HelloWorld1”. The main method proceeds to call the debug method of this logger passing “Hello World” as an argument. We say that the main method contains a logging statement of level DEBUG with the message “Hello world”.

这段话是说 Logger logger = LoggerFactory.getLogger(“chapters.introduction.HelloWorld1”);的由来,是通过静态方法来的,通过debug 输出hello world

Note that the above example does not reference any logback classes. In most cases, as far as logging is concerned, your classes will only need to import SLF4J classes. Thus, the vast majority, if not all, of your classes will use the SLF4J API and will be oblivious to the existence of logback.

还是我上面说的slf4j是接口,logback的实现被隐藏了。
此时如果是简单的输出日志,目前已经满足基本需求了。
但是需求千奇百怪,八股文一套一套,框架底层刨根究底,还得继续学。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;

public class HelloWorld2 {

  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger("chapters.introduction.HelloWorld2");
    logger.debug("Hello world.");

    // print internal state
    LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
    StatusPrinter.print(lc);
  }
}

在这里插入图片描述

Logback explains that having failed to find the logback-test.xml and logback.xml configuration files (discussed later), it configured itself using its default policy, which is a basic ConsoleAppender. An Appender is a class that can be seen as an output destination. Appenders exist for many different destinations including the console, files, Syslog, TCP Sockets, JMS and many more. Users can also easily create their own Appenders as appropriate for their specific situation.

通过打印日志可以看到,没有找到logback-test.xml,logback.groovy,logback.xml 然后采用了默认的配置ConsoleAppender。
Appender可以看作

Note that in case of errors, logback will automatically print its internal state on the console.

The previous examples are rather simple. Actual logging in a larger application would not be that different. The general pattern for logging statements would not change. Only the configuration process would be different. However, you would probably want to customize or configure logback according to your needs. Logback configuration will be covered in subsequent chapters.

Note that in the above example we have instructed logback to print its internal state by invoking the StatusPrinter.print() method. Logback’s internal status information can be very useful in diagnosing logback-related problems.

Here is a list of the three required steps in order to enable logging in your application.
1.Configure the logback environment. You can do so in several more or less sophisticated ways. More on this later.
2.In every class where you wish to perform logging, retrieve a Logger instance by invoking the org.slf4j.LoggerFactory class’ getLogger() method, passing the current class name or the class itself as a parameter.
3.Use this logger instance by invoking its printing methods, namely the debug(), info(), warn() and error() methods. This will produce logging output on the configured appenders.

说了3点:
1.配置logback环境也就是引入jar,写xml
2.org.slf4j.LoggerFactory class’ getLogger() method
3.log.debug log.info 去打印
这个是最最简单的。继续学习。

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

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

相关文章

硬件系统工程师宝典(36)-----盘点常用的总线和常见的逻辑电平

各位同学大家好&#xff0c;欢迎继续做客电子工程学习圈&#xff0c;今天我们继续来讲这本书&#xff0c;硬件系统工程师宝典。 上篇我们了解了SDRAM的存储技术以及SDRAM的发展历程&#xff0c;技术的进步推动着产品的升级&#xff0c;也加速了整个电子行业的发展。今天我们来…

[信号与系统系列] 正弦振幅调制之差拍信号

当将具有不同频率的两个正弦曲线相乘时&#xff0c;可以创建一个有趣的音频效果&#xff0c;称为差拍音符。这种现象听起来像颤音&#xff0c;最好通过选择一个频率非常小的信号与和另一个频率大约1KHz的信号&#xff0c;把二者混合从而听到。一些乐器能够自然产生差拍音符。使…

SAP MIGO 移动原因维护

在OMJJ中维护 在OMJJ中&#xff0c;选择你要维护的移动类型&#xff0c;在“对话结构”中选择“移动原因”&#xff0c;可以修改和添加了。

【JUC】复习指南

JUC复习指南&#xff1a; JUC有哪些知识点&#xff1f; 什么是Juc Lock接口 线程间通信 集合的线程安全问题 多线程锁 Callable接口 JUC三大辅助类 CountDownLatch CyclicBarrier Semaphore 读写锁 ReetrantReadWriteLOck 阻塞队列 ThreadPool线程池 Fork/join Com…

【Docker】Docker容器化技术基础(一篇可以让你学到docker使用的文章)

Docker容器化技术 Docker&#xff08;软件跨环境迁移&#xff09;Docker概念&#xff1a;安装Dockerdocker架构配置Docker镜像加速器 一、Docker命令服务daemon相关的命令镜像相关命令Docker容器相关命令 二、Docker容器的数据卷数据卷概念配置数据卷配置数据卷容器 三、Docker…

关于简单C++函数在内存中的存储问题

举例 int main(){... }int data(){... }int add(){... } 在分段式存储管理时&#xff0c;根据人们的需求&#xff0c;人为分段存储 如图&#xff1a;

MySql用户管理、权限管理

用户管理 1. 查看系统用户&#xff08;查询mysql系统数据库中的user表&#xff09; select * from mysql.user; 2. 创建用户 CREATE USER 用户名主机名 identified by 密码 -- 创建用户zhonghua,只能在当前主句localhost访问,密码为123456 create user zhonghualocalhost i…

代码反向生成时序图类图-Visual_Paradigm实践

目录 前言 一、Visual_Paradigm介绍 1、主界面介绍 2、功能简介 二、基于代码的序列图生成 1、新建VP项目工程 2、序列图反向生成 三、VP类图生成 1、生成主入口 四、数据ER模型生成 1、SQL脚本 2、ER反向生成 总结 前言 不知道作为研发的小伙伴们&#xff0c;在平时的…

Endnote插入生成参考文献的四种方式

Endnote插入生成参考文献的四种方式 为了熟练Endnote进行在word中插入参考文献&#xff0c;本文介绍四种插入生成参考文献的四种方式。 一、采用Endnote插入按钮方式生成 word选中插入参考文献位置—转入endnote—选中要插入的文献—点击Endnote插入按钮&#xff0c;过程如图…

Java数据类型,一文带你彻底拿捏~

——Java中运算符是一种特殊的符号&#xff0c;用来进行数据的运算、赋值和比较等 思维导图 一.算术运算符 1.什么是算术运算符 ——算术运算符是用于数据类型值之间&#xff0c;使用2个或以上的数据进行运算 2.算术运算符概括 算术运算符 解释示例&#xff0c;-正号&…

CMake:检测python模块和包

CMake:检测python模块和包 导言项目结构CMakeLists.txt相关源码 导言 上一篇&#xff0c;我们基本了解了如何去检测python的解释器和python库。通常&#xff0c;代码是依赖于特定的python模块&#xff0c;无论是python工具、嵌入python的程序&#xff0c;还是扩展python的库。…

Spring Boot 项目应用消息服务器RabbitMQ(简单介绍)

一、背景 本章讲述的是在用户下单环节&#xff0c;消息服务器RabbitMQ 的应用 1.1 消息服务器的应用 在写一个电商项目的小demo&#xff0c;在电商项目中&#xff0c;消息服务器的应用&#xff1a; 1、订单状态通知&#xff1a;当用户下单、支付成功、订单发货、订单完成等…

训练、验证和测试一句话搞懂

文章目录 训练集&#xff08;training dataset&#xff09;验证集(validation dataset)测试集(test dataset)训练集可划分为训练集和验证集二二六&#xff0c;一一八&#xff0c;一一一百 训练集&#xff08;training dataset&#xff09; 类比课堂知识&#xff0c;训练模型得…

Python中enumerate用法详解

目录 1.简介 2.语法 3.参数 4.返回值 5.详解 6.实例 7.补充 1.简介 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列&#xff0c;同时列出数据和数据下标&#xff0c;一般用在 for 循环当中。 2.语法 以下是 enumerate() 方法的语…

勘探开发人工智能应用:人工智能概述

0 提纲 机器学习、深度学习、计算机视觉等技术已在勘探开发、油气生产、炼油炼化、经营管理等重点环节进行应用与推广。请思考&#xff1a; 输入&#xff1a;数据是什么(数字、文本、图)&#xff1f;如何理解数据&#xff1f;如何清洗数据&#xff1f;(需要专业领域知识)输出&…

鉴权服务-天G报错引发的感想:一定要有如果报错的预案

今天是HW第一天&#xff0c;下午运维人员说鉴权服务上不去了&#xff0c;看了眼天宫&#xff0c;结果重启了&#xff0c;后来的情况就是20多分钟半小时一重启&#xff0c;真么神奇。开始排查原因&#xff1a; 1、前两天发版换的agent版本发布&#xff0c;但是不知道有没有这个…

【Winform学习笔记(六)】warning MSB3274:引用dll版本冲突

warning MSB3274&#xff1a;引用dll版本冲突 前言正文1、解决方法 前言 在本文中主要介绍 解决 类库编译 Warning MSB3274 的方法&#xff1b; 在项目中引用了自定义控件库&#xff0c;界面设计时可以正常放置删除控件&#xff0c;但启动时会报异常&#xff1b; 编译提示&…

Selenium 是什么?简单明了的介绍

Selenium Selenium 是什么 Selenium 是一款 Web UI 测试工具&#xff0c;是一款 自动化测试 工具&#xff0c;使用 Selenium 测试工具进行的测试通常被称为 Selenium Testing&#xff0c;各种支持如下列表&#xff1a; UI 元素的支持与管理&#xff1a;自写代码实现浏览器支…

(八)穿越多媒体奇境:探索Streamlit的图像、音频与视频魔法

文章目录 1 前言2 st.image&#xff1a;嵌入图像内容2.1 图像展示与描述2.2 调整图像尺寸2.3 使用本地文件或URL 3 st.audio&#xff1a;嵌入音频内容3.1 播放音频文件3.2 生成音频数据播放 4 st.video&#xff1a;嵌入视频内容4.1 播放视频文件4.2 嵌入在线视频 5 结语&#x…

c语言每日一练(4)

五道选择题 1、有以下代码&#xff0c;程序的输出结果是( ) #include <stdio.h> int main() {int a 0, b 0;for (a 1, b 1; a < 100; a){if (b > 20) break;//1if (b % 3 1)//2{b b 3;continue;}b b-5;//3}printf("%d\n", a);return 0; } A.1…