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.简介 自动化测试中进行断言的时候,我们可能经常遇到的场景.从一个字符串中找出一组数字或者其中的某些关键字,而不是将这一串字符串作为结果进行断言.这个时候就需要我们对字符串进行操作,宏哥这里介绍两种 ...
随机推荐
- [secureCRT] 关闭secureCRT的auto print功能
说明:每次不小心按到secureCRT的auto print时,secure总是会自动打印,结果打印出一堆没用的日志.....切换选项页时不小心按到的,还是挺浪费纸的.怎样才能关闭这个功能呢 实现:想 ...
- Jmeter linux 运行
一.在Linux服务器先安装sdk 1.先从客户端下载jdk1.8.0_144.tar.gz,再上传到服务器 2.解压:tar -xzf jdk1.8.0_144.tar.gz,生成文件夹 jdk1. ...
- java代理,手把手交你写java代理
一:常用的java代理模式 一般经常做java开发的知道java的代理模式一共有三种,第一种也就是静态代理,这种用法比较简单,没有什么魔法棒,比较好理解,另外两种分别是JDK代理和cglib代理,他们 ...
- vim 永久显示行号 & 临时显示行号
在linux环境下,vim是常用的代码查看和编辑工具.在程序编译出错时,一般会提示出错的行号,但是用vim打开的代码确不显示行号,错误语句的定位非常不便.那么怎样才能让vim显示代码的行号呢? 1 临 ...
- pwn学习日记Day15 《程序员的自我修养》读书笔记
程序编译链接过程: 1.调用cc1程序,这个程序实际上就是GCC的C语言编译器,它将"hello.c"编译成一个临时的汇编文件"/tmp/ccUhtGSB.s" ...
- 笔记三(UEFI详解)
1.SEC 安全验证 SEC(Security Phase)阶段是平台初始化的第一个阶段,计算机系统加电后进入这个阶段. 1)接收并处理系统启动和重启信号:系统加点信号.系统重启信号.系统运行过程中的 ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_06-freemarker基础-遍历map数据
大的map里面有一些小的map 遍历数据模型里面的stuMap <br/> 遍历数据模型中的stuMap(map)数据 <br/> 姓名:${stuMap['stu1'].na ...
- 阶段5 3.微服务项目【学成在线】_day02 CMS前端开发_07-vuejs研究-vuejs基础-v-bind指令
4.v-bind v-bind:无法双向绑定’ 1.作用: v‐bind可以将数据对象绑定在dom的任意属性中. v‐bind可以给dom对象绑定一个或多个特性,例如动态绑定style和class 2 ...
- uni-app 保持登录状态 (Vuex)
在小程序中,保持登录状态是很常见的需求,今天就把写一写使用uni-app框架的保持登录状态功能是怎样实现的. 一.场景需求 1.场景:初始打开---登陆---关闭,再次打开---(已登录)上次关闭前的 ...
- OpenStack Cinder发展动态系列--Austin峰会
在Mitaka版本,Cinder团队在多个特性和领域取得了重大进展. 本文将做一个简要的介绍:关于在Mitaka版本已经完成的功能和特性,以及讨论在Newton版本将会开发的功能和特性. 1 Cind ...