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.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
随机推荐
- Bzoj 1208: [HNOI2004]宠物收养所(splay)
1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec Memory Limit: 162 MB Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收 ...
- MySQL数据分析(16)— 数据操作之增删改查
前面我们说学习MySQL要从三个层面,四大逻辑来学,三个层面就是库层面,表层面和数据层面对吧,数据库里放数据表,表里放数据是吧,大家可以回忆PPT中jacky的这图,我们已经学完了库层面和表层面,从本 ...
- gzip 的使用
bogon:Desktop macname$ mkdir testdir bogon:Desktop macname$ cd testdir/ bogon:testdir macname$ ls bo ...
- Python语法 - 推导式
推导式分为列表推导式(list),字典推导式(dict),集合推导式(set)三种 列表推导式(list comprehension)最擅长的方式就是对整个列表分别做相同的操作,并且返回得到一个新的列 ...
- 第11组 Alpha事后诸葛亮
第11组 Alpha事后诸葛亮 组长博客链接 https://www.cnblogs.com/xxylac/p/11924846.html 设想和目标 我们的软件要解决什么问题?是否定义得很清楚? ...
- concurrency parallel 并发 并行 parallelism
在传统的多道程序环境下,要使作业运行,必须为它创建一个或几个进程,并为之分配必要的资源.当进程运行结束时,立即撤销该进程,以便能及时回收该进程所占用的各类资源.进程控制的主要功能是为作业创建进程,撤销 ...
- 安装vue模板时,选择webpack-simple还是Webpack?
选用模板常用的是webpack与webpack-simple.webpack-simple是基于Webpack@2.1.0-beta.25进行配置的版本,而webpack模板则是基于Webpack ^ ...
- 【I·M·U_Ops】------Ⅱ------ IMU自动化运维平台之CMDB
说明本脚本仅作为学习使用,请勿用于任何商业用途.本文为原创,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. #A 我理解的 CMDB CMDB翻译过来,Configuratio ...
- mongodb 添加用户报错TypeError:db.addUser is not a function (mongodb3.4.1)
1:问题如下: 原因是 新版的MongoDB已经不支持addUser方法了. 改成createUser了. 使用方法如下 2:具体解释一下db.createUser()方法的用法 定义: 创 ...
- oracle赋予一个用户具有查询另一个用户所有表数据
一 以需要被查询的用户登录oracle(假如为A) B为要查询A用户下的表的用户 二 执行查询语句: select 'grant select on A.'|| tname ||' to B ...