java日志框架系列(2):logback框架详解
1.logback介绍
1.什么是logback
Logback 为取代 log4j 而生。
2.logback组成部分
3.Logger、Appender和Layout
Logback建立在3个主要的类之上:Logger、Appender、Layout。这三个组件协同工作,使开发者可以按照消息类型 和级别来记录消息,还可以在程序运行期内控制消息的输出格式和输出目的地。
Logger类是logback-classic模块的一部分,而Appender和Layout接口来自于logback-core。作为一个多用途模块,logback-core不包含任何logger。
slf4j框架的logger接口(slf4j.Logger)只有一些获取logger属性及打印的方法;而logback框架的Logger类(ch.qos.logback.classic.Logger)实现了slf4j.Logger接口并且添加了一些可以设置logger属性的方法(比如设置有效级别setLevel方法)。
因此,如果你想通过代码设置Logger的属性,请使用logback-classic.jar文件中的ch.qos.logback.classic.Logger类,否则使用slf4j-api.jar文件中的org.slf4j.Logger类。
1.logger上下文LoggerContext
日志系统重要的优点是:禁用特定记录语句的同时却不妨碍输出其他语句。这个优点源于记录隔离。
2.logger命名规则
Logger rootLogger = LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME);
3.Logger的有效级别(Level)
有效级别就是继承级别。

在例1中,仅根logger被分配了级别。级别值DEBUG被其他logger(比如X、X.Y、X.Y.Z)继承。
例2:
在例2中,所有级别都被分配了级别,因此级别继承不发挥作用。

在例 3 中,根 logger、X 和 X.Y.Z 分别被分配了 DEBUG、INFO 和 ERROR 级别。X.Y 从其父 X 继承级别。

在例4中,根 logger 和 X 分别被分配了 DEBUG 和 INFO 级别。X.Y 和 X.Y.Z 从其最近的父 X 继承级别,因为 X 被分配了级别。
4.日志打印方法和基本选择规则
1.日志打印方法
根据定义,打印方法决定记录请求级别。
打印方法类别如下:
接下来通过实例 1来理解“打印方法决定记录请求级别”这句话。
实例1:
如果L是一个logger实例,那么语句L.info("message")是一条级别为INFO的记录语句。
注意:记录请求的级别在高于或等于其 logger 的有效级别时被称为被启用,否则,称为被禁用。
2.日志基本选择规则
级别排序:TRACE < DEBUG < INFO < WARN < ERROR
基本选择规则:
如果记录请求级别为p,其logger的有效级别为q,那么只有当p>=q时,该请求才会被执行。
记录请求级别就是指调用logger的打印方法的类别(比如debug方法、info方法等);有效级别是在配置文件中设置的级别。
下表显示了选择规则是如何工作的:
5.获取logger对象

logback可以以任何顺序创建和配置logger。特别注意的是,即使“父”logger是在其后代初始化之后才初始化的,它仍将查找并链接到其后代们。
通常是在程序初始化时对logback环境进行配置。推荐用配置文件类进行配置。
6.Appender(输出目的地)
logback允许打印记录请求到多个目的地。在logback中,一个输出目的地成为一个Appender。
Appender分类:控制台、文件、远程套接字服务器、mysql、PostreSQL、Oracle和其他数据库、JMS和远程UNIX Syslog守护进程等。
一个logger可以被关联多个appender。

7.Layout(输出信息的格式)

8.参数化记录
特别强调:在logback中允许在记录请求方法中使用大括号“{}”作为占位符。
下面通过一个实例1讲解一下:
实例1:
假设entry是一个对象,而你需要使用记录请求输出这个对象的信息,那么你可以这样写:
9.工作原理
1.logback执行的相应操作:
2.原理流程图

10.性能
我们还是要注意记录对程序的一些性能影响的。
1.记录被关闭时的记录性能
可以将根logger的级别设为最高级的Level.OFF,就可以彻底关闭记录。
2.当记录启用时,判断是否进行记录的性能
3.实际记录(格式化和写入输出设备)
性能消耗包括格式化输出和发送到目的地。
java日志框架系列(2):logback框架详解的更多相关文章
- Java容器解析系列(10) Map AbstractMap 详解
前面介绍了List和Queue相关源码,这篇开始,我们先来学习一种java集合中的除Collection外的另一个分支------Map,这一分支的类图结构如下: 这里为什么不先介绍Set相关:因为很 ...
- 深入理解JAVA I/O系列二:字节流详解
流的概念 JAVA程序通过流来完成输入/输出.流是生产或消费信息的抽象,流通过JAVA的输入输出与物理设备链接,尽管与它们链接的物理设备不尽相同,所有流的行为具有相同的方式.这样就意味一个输入流能够抽 ...
- Java容器解析系列(5) AbstractSequentialList LinkedList 详解
AbstractSequentialList为顺序访问的list提供了一个骨架实现,使实现顺序访问的list变得简单; 我们来看源码: /** AbstractSequentialList 继承自 A ...
- 《手把手教你》系列技巧篇(四十二)-java+ selenium自动化测试 - 处理iframe -下篇(详解教程)
1.简介 经过宏哥长时间的查找,终于找到了一个含有iframe的网页.所以今天这一篇的主要内容就是用这个网页的iframe,宏哥给小伙伴或者童鞋们演示一下,在处理过程中遇到的问题以及宏哥是如何解决的. ...
- logback的使用和logback.xml详解,在Spring项目中使用log打印日志
logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分 ...
- ORM框架对比以及Mybatis配置文件详解
ORM框架对比以及Mybatis配置文件详解 0.数据库操作框架的历程 (1) JDBC JDBC(Java Data Base Connection,java数据库连接)是一种用于执行SQL语句 ...
- Django框架 之 ORM查询操作详解
Django框架 之 ORM查询操作详解 浏览目录 一般操作 ForeignKey操作 ManyToManyField 聚合查询 分组查询 F查询和Q查询 事务 Django终端打印SQL语句 在Py ...
- laravel框架的中间件middleware的详解
本篇文章给大家带来的内容是关于laravel框架的中间件middleware的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. laravel中间件是个非常方便的东西,能将一些逻辑 ...
- 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解
数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...
- 《手把手教你》系列技巧篇(五十)-java+ selenium自动化测试-字符串操作-上篇(详解教程)
1.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
随机推荐
- sync、fsync和fdatasync
转自 http://blog.csdn.net/todd911/article/details/11701847 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓 ...
- JVM——垃圾回收
目录: 如何判断垃圾是否回收? 引用计数法 可达性分析算法 四种引用 引用队列 垃圾回收算法 标记清除算法 复制算法 标记整理算法 分代垃圾回收 新生代 老年代 Minor GC 和 Full GC的 ...
- Spring Boot教程(七)通过springboot 去创建和提交一个表单
创建工程 涉及了 web,加上spring-boot-starter-web和spring-boot-starter-thymeleaf的起步依赖. <dependencies> < ...
- Java安全(加密、摘要、签名、证书、SSL、HTTPS)
对于一般的开发人员来说,很少需要对安全领域内的基础技术进行深入的研究,但是鉴于日常系统开发中遇到的各种安全相关的问题,熟悉和了解这些安全技术的基本原理和使用场景还是非常必要的.本文将对非对称加密.数字 ...
- awk、grep、sed
awk.grep.sed是linux操作文本的三大利器,也是必须掌握的linux命令之一.三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂.grep更适合单纯的查找或匹配文 ...
- xman随机数相关题目
参加xman夏令营,大佬给我们带来了密码学课程.其中随机数部分感受颇深,记录下几个脚本. 1. 以时间作为种子的随机数 https://www.jarvisoj.com/ 的[xman2019]bab ...
- 攻防世界RE1 writeup
解题过程 将题目给出的exe文件拖入ida中,查看main函数. 分析函数的逻辑,发现用户需要输出一个字符串,存储到变量v9中.如果v9的值与v5的值相等则会打印unk_413e90中的值,否则打印a ...
- C++公有继承,私有继承和保护继承的区别
昨天学习三种继承方式,有些比喻十分形象,特此分享. 首先说明几个术语: 1.基类 基类比起它的继承类是个更加抽象的概念,所描述的范围更大.所以可以看到有些抽象类,他们设计出来就是作为基类所存在的(有些 ...
- mysql 给用户设置权限
grant all on wordpress.* to wordpress@'10.0.0.%' identified by 'wordpress'; all 全部权限 ...
- VUE组件如何通信
Vue父子组件如何通信? 子组件通知父组件(调用父组件方法) 在父组件使用 on(eventName)监听事件,在子组件使用emit(eventName) 触发事件 : 父组件通知子组件(调用子组件方 ...