当前位置: 首页 > news >正文

1. Logback介绍

Logback介绍

Logback旨在成为流行的log4j项目的继任者。它由Ceki Gülcü设计,他是log4j的创始人。它基于十年在设计工业级日志系统方 面的经验。结果产品,即logback,比所有现有的日志系统更快,具有更小的占用空间,有时差距非常大。同样重要的是,logback提供了其他日志系统所缺乏的独特而实用的功能。

第一步

为了运行本章中的示例,您需要确保在类路径上存在某些jar文件。请参阅设置页面以获取详细信息。

要求
logback-classic模块需要在类路径上存在slf4j-api.jar和logback-core.jar,除此之外还需要存在logback-classic.jar。

logback-*.jar文件是logback分发包的一部分,而slf4j-api-2.0.7.jar则与SLF4J一起提供,是另一个项目。

让我们现在开始使用logback进行实验。

示例1.1:基本的日志记录模板(logback-examples/src/main/java/chapters/introduction/HelloWorld1.java)

package chapters.introduction;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.");}
}

在chapters.introduction包中定义了HelloWorld1类。它首先导入SLF4J API中定义的Logger和LoggerFactory类,具体在org.slf4j包下。

在main()方法的第一行,变量logger被赋值为通过调用LoggerFactory类的静态getLogger方法获取的Logger实例。
这个logger被命名为“chapters.introduction.HelloWorld1”。main()方法继续调用该logger的debug方法,并将"Hello World"作为参数传递。
我们说main()方法包含一个级别为DEBUG的日志语句,消息为"Hello world"。

请注意,上述示例未引用任何logback类。在大多数情况下,就日志记录而言,您的类只需要导入SLF4J类。
因此,如果不是所有,那么大部分甚至所有的类都将使用SLF4J API,对logback的存在毫不知情。

您可以使用以下命令启动第一个样本应用程序,即chapters.introduction.HelloWorld1:

java chapters.introduction.HelloWorld1

启动HelloWorld1应用程序将在控制台输出一条单行。由于logback的默认配置策略,当找不到默认配置文件时,
logback将向根 logger 添加一个 ConsoleAppender。

20:49:07.962 [main] DEBUG chapters.introduction.HelloWorld1 - Hello world.

Logback可以使用内置的状态系统报告其内部状态。通过称为StatusManager的组件,可以访问在logback生命周期期间发生的重要事件。
目前,我们将通过调用StatusPrinter类的静态print()方法来指示logback打印其内部状态。

示例:打印Logger状态(logback-examples/src/main/java/chapters/introduction/HelloWorld2.java)

package chapters.introduction;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 stateLoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();StatusPrinter.print(lc);}
}

运行HelloWorld2应用程序将产生以下输出:

12:49:22.203 [main] DEBUG chapters.introduction.HelloWorld2 - Hello world.
12:49:22,076 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
12:49:22,078 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
12:49:22,093 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Setting up default configuration.

Logback解释说在找不到logback-test.xml和logback.xml配置文件(稍后会讨论)时,它使用其默认策略进行了配置,该策略是一个基本的ConsoleAppender。
Appender是一个类,可以看作是输出目的地。对于许多不同的目的地,包括控制台、文件、Syslog、TCP套接字、JMS等等,存在Appender。
用户也可以根据自己的特定情况轻松创建自己的Appender。

请注意,在出现错误时,logback会自动在控制台中打印其内部状态。

前面的例子比较简单。在大型应用程序中实际进行日志记录并不会有太大不同。一般的日志记录语句模式不会改变。只有配置过程会有所不同。
但是,您可能希望根据自己的需求自定义或配置logback。logback的配置将在后续章节中进行介绍。

请注意,在上面的例子中,我们通过调用StatusPrinter的print()方法来指示logback打印其内部状态。logback的内部状态信息非常有用,可以诊断与logback相关的问题。

启用应用程序日志记录的三个必要步骤如下:

1.配置logback环境。您可以通过多种或更复杂的方式进行配置。稍后会进行讨论。

2.在每个希望进行日志记录的类中,通过调用org.slf4j.LoggerFactory类的getLogger()方法获取Logger实例,并将当前类名或类本身作为参数传递。

3.使用此Logger实例调用其打印方法,即debug(), info(), warn()和error()方法。这将在配置的Appender上产生日志输出。

Logback的构建工具是Maven,这是一款广泛使用的开源构建工具。

一旦您安装了Maven,构建logback项目,包括所有模块,应该很容易,只需从解压logback分发目录的目录中发出mvn install命令即可。Maven将自动下载所需的外部库。

logback分发包含完整的源代码,因此您可以修改logback库的部分,并构建自己的版本。您甚至可以重新分发修改后的版本,只要遵守LGPL许可证或EPL许可证的条件即可。

有关在IDE下构建logback的信息,请参见类路径设置页面的相关部分。

相关文章:

1. Logback介绍

Logback介绍 Logback旨在成为流行的log4j项目的继任者。它由Ceki Glc设计,他是log4j的创始人。它基于十年在设计工业级日志系统方 面的经验。结果产品,即logback,比所有现有的日志系统更快,具有更小的占用空间,有时差距…...

SqueezeNet:通过紧凑架构彻底改变深度学习

一、介绍 在深度学习领域,对效率和性能的追求往往会带来创新的架构。SqueezeNet 是神经网络设计的一项突破,体现了这种追求。本文深入研究了 SqueezeNet 的复杂性,探讨其独特的架构、设计背后的基本原理、应用及其对深度学习领域的影响。 在创…...

Python:正则表达式之re.group()用法

Python正则表达式之re.group()用法学习笔记 正则表达式是在处理字符串时非常有用的工具,而re.group()是在匹配到的文本中提取特定分组内容的方法之一。 1. re.group()的基本用法 在正则表达式中,通过圆括号可以创建一个或多个分组。re.group()用于获取…...

Shiro框架:Shiro登录认证流程源码解析

目录 1.用户登录认证流程 1.1 生成认证Token 1.2 用户登录认证 1.2.1 SecurityManager login流程解析 1.2.1.1 authenticate方法进行登录认证 1.2.1.1.1 单Realm认证 1.2.1.2 认证通过后创建登录用户对象 1.2.1.2.1 复制SubjectContext 1.2.1.2.2 对subjectContext设…...

WEB前端人机交互导论实验-实训2格式化文本、段落与列表

1.项目1 文本与段落标记的应用&#xff1a; A.题目要求: B.思路&#xff1a; &#xff08;1&#xff09;首先&#xff0c;HTML文档的基本结构是通过<html>...</html>标签包围的&#xff0c;包含了头部信息和页面主体内容。 &#xff08;2&#xff09;在头部信息…...

Python:list列表与tuple元组的区别

在Python中&#xff0c;List&#xff08;列表&#xff09; 和Tuple&#xff08;元组&#xff09; 都是用于存储一组有序元素的数据结构&#xff0c;但它们有一些关键的区别&#xff0c;包括可变性、性能、语法等方面。 1. List&#xff08;列表&#xff09; 用法&#xff1a;…...

如何基于 Gin 封装出属于自己 Web 框架?

思路 在基于 Gin 封装出属于自己的 Web 框架前&#xff0c;你需要先了解 Gin 的基本用法和设计理念。 然后&#xff0c;你可以通过以下步骤来封装自己的 Web 框架&#xff1a; 封装路由&#xff1a;Gin 的路由是通过 HTTP 方法和 URL 路径进行匹配的&#xff0c;你可以根据自己…...

VUE element-ui实现表格动态展示、动态删减列、动态排序、动态搜索条件配置、表单组件化。

1、实现效果 1.1、文件目录 1.2、说明 1、本组件支持列表的表头自定义配置&#xff0c;checkbox实现 2、本组件支持列表列排序&#xff0c;vuedraggable是拖拽插件&#xff0c;上图中字段管理里的拖拽效果 &#xff0c;需要的话请自行npm install 3、本组件支持查询条件动态…...

压测工具ab

Apache Benchmark(简称ab) 是Apache安装包中自带的压力测试工具 &#xff0c;简单易用, Apache的ab命令模拟多线程并发请求&#xff0c;测试服务器负载压力&#xff0c;也可以适用于其他服务&#xff1a;nginx、lighthttp、tomcat、IIS等其它Web服务器的压力 采用平台&#xf…...

P4学习(一) 环境搭建

系列文章目录 第一章 P4学习入门之虚拟机环境搭建 文章目录 系列文章目录前言一、P4是什么&#xff1f;二、搭建步骤1.下载虚拟机镜像2.虚拟机管理软件载入镜像2.1 找到你镜像的所在位置2.2 打开VMware Workstation2.3 载入镜像 3.检验环境是否配置成功 P4 的真机环境搭建 前言…...

openssl3.2 - 官方demo学习 - server-arg.c

文章目录 openssl3.2 - 官方demo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方demo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…...

Windows RPC运行时漏洞事后总结

2022年4月前后&#xff0c;Windows RPC运行时被曝出存在远程代码执行漏洞&#xff0c;当时曾引起很多人广泛关注。微软很快做出反应&#xff0c;发布补丁程序进行修补。这次事件中&#xff0c;Windows远程过程调用&#xff08;RPC&#xff09;运行时共出现三个关键漏洞&#xf…...

运算电路(1)——加法器

一、引言 微处理器是由一片或少数几片大规模集成电路组成的中央处理器。这些电路执行控制部件和算术逻辑部件的功能。微处理器能完成取指令、执行指令&#xff0c;以及与外界存储器和逻辑部件交换信息等操作&#xff0c;是微型计算机的运算控制部分。它可与存储器和外围电路芯片…...

ESP32-WIFI(Arduino)

ESP32-WIFI Wi-Fi是一种基于IEEE 802.11标准的无线局域网技术&#xff0c;是Wi-Fi联盟制造商的商标作为产品的品牌认证。它可以让电脑、手机、平板电脑等设备通过无线信号连接到互联网 。 在无线网络中&#xff0c;AP&#xff08;Access Point&#xff09;和 STA&#xff08;St…...

【网络虚拟化】网络设备常见冗余方式——堆叠、M-Lag、DRNI

网络设备常见冗余设计——堆叠、M-Lag、DRNI 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 网络设备常见冗余设计——堆叠、M-Lag、DRNI 网络设备常见冗余设计——堆叠、M-Lag、DRNI前言一、网络设备虚拟化二、堆叠技术1.技术原理2.…...

arm的侏罗纪二 cache学习

个人觉得inner shareable和outer shareable&#xff1b;POU和POC 是难点&#xff0c;慢慢学习吧。 inner shareable是cluster内 outer shareable是cluster之间 参考文献&#xff1a; 深入学习Cache系列 1: 带着几个疑问&#xff0c;从Cache的应用场景学起 https://www.eet-c…...

Protecting Intellectual Property of Deep NeuralNetworks with Watermarking

保护深度神经网络的知识产权与数字水印技术 ABSTRACT 深度学习是当今人工智能服务的关键组成部分&#xff0c;在视觉分析、语音识别、自然语言处理等多个任务方面表现出色&#xff0c;为人类提供了接近人类水平的能力。构建一个生产级别的深度学习模型是一项非常复杂的任务&a…...

c++学习笔记-STL案例-机房预约系统1-准备工作

前言 准备工作包括&#xff1a;需求分析、项目创建、主菜单实现、退出功能实现 目录 1 机房预约系统需求 1.1 简单介绍 1.2 身份介绍 1.3 机房介绍 1.4 申请介绍 1.5 系统具体要求 1.6 预约系统-主界面思维导图 2 创建项目 2.1 创建项目 2.2 添加文件 ​编辑 3 创建…...

AnnData:单细胞和空间组学分析的数据基石

AnnData&#xff1a;单细胞和空间组学分析的数据基石 今天我们来系统学习一下单细胞分析的标准数据类型——AnnData&#xff01; AnnData就是有注释的数据&#xff0c;全称是Annotated Data。 AnnData是为了矩阵类型数据设计的&#xff0c;也就是长得和表格一样的数据。比如…...

C语言中的 `string.h` 头文件包含的函数

C语言中的 string.h 头文件包含了许多与字符串或数字相关的函数。这些函数可以用于字符串的复制、连接、搜索、比较等操作。 常用字符串函数 函数名功能strlen()返回字符串的长度strcpy()将一个字符串复制到另一个字符串中strncpy()将最多 n 个字符从一个字符串复制到另一个字…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

【Java学习笔记】Arrays类

Arrays 类 1. 导入包&#xff1a;import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序&#xff08;自然排序和定制排序&#xff09;Arrays.binarySearch()通过二分搜索法进行查找&#xff08;前提&#xff1a;数组是…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

【Java学习笔记】BigInteger 和 BigDecimal 类

BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点&#xff1a;传参类型必须是类对象 一、BigInteger 1. 作用&#xff1a;适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定&#xff0c;这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中&#xff0c;积分电荷法最为常用&#xff0c;其原理是通过测量在电容器上积累的热释电电荷&#xff0c;从而确定热释电系数…...