log4j2笔记 #01# Architecture
索引
Architecture
Main Components
Log4j使用下图所示的类。

使用Log4j 2 API的应用程序将从LogManager请求具有特定名称的Logger。LogManager将定位适当的LoggerContext,然后从中获取Logger。如果必须创建Logger,它将与LoggerConfig相关联,LoggerConfig包含 a)与Logger相同的名字,b)父包的名字,或 c) root LoggerConfig。LoggerConfig对象是从配置中的Logger声明创建的。LoggerConfig与实际交付LogEvents的Appenders相关联。
Logger Hierarchy
与普通System.out.println相比,任何日志API的第一个也是最重要的优点是:能够禁用某些日志语句,同时允许其他日志语句不受阻碍地打印。这个功能假定日志空间,也就是所有可能日志语句的空间,是根据开发人员选择的一些标准进行分类的。
在Log4j 1.x 里,Logger层次结构是通过Logger之间的关系来维护的。在Log4j 2中,这种关系不再存在。相反,层次结构是在LoggerConfig对象之间的关系中维护的。
Logger和LoggerConfig是命名实体。日志记录器名称区分大小写,它们遵循分层命名规则。
LoggerContext
LoggerContext充当日志系统的锚点。但是,根据具体情况,应用程序中可能有多个活动的LoggerContexts 。有关LoggerContext的更多细节见日志分隔部分。
Configuration
每个LoggerContext都有一个活动的Configuration。Configuration包含所有Appenders、上下文范围的Filters、LoggerConfigs,并包含对StrSubstitutor的引用。在重新配置期间,将存在两个配置对象。一旦所有Logger被重定向到新的Configuration,旧的Configuration将被停止并丢弃。
Logger
如前所述,Logger是通过调用LogManager.getLogger创建的。Logger本身不执行任何直接操作。它只有一个名称,并与LoggerConfig关联。它扩展了AbstractLogger并实现了所需的方法。当配置被修改时,记录器可能与不同的LoggerConfig关联,从而导致它们的行为被修改。
Retrieving Loggers
由于以Logger所属类的名称命名Logger是一种非常常见的习惯用法,因此提供了方便的方法LogManager.getLogger()来自动使用调用类的完全限定类名作为Logger名称。
LoggerConfig
LoggerConfig对象是在日志配置中声明Logger时创建的。LoggerConfig包含一组Filters,LogEvent在传递给任何Appenders之前,必须通过这些Filters。它包含用于处理事件的Appenders的引用。
Log Levels
Log4j 1.x和Logback都有“级别继承”的概念。在Log4j 2中,Logger和LoggerConfigs是两个不同的对象,因此这个概念的实现是不同的。每个Logger引用适当的LoggerConfig,而LoggerConfig又可以引用它的父类,从而达到相同的效果。(PS. 言下之意,概念没有变,只不过实现方式有点不一样罢了)
与Logback不同的是,在ERROR和OFF中间添加了FATAL级别。
Filter
除了根据日志级别自动过滤,如前一节所述,Log4j提供Filters,可以应用在控制传递给任何LoggerConfig之前,控制传递给LoggerConfig后但在调用任何Appenders之前,控制传递给LoggerConfig后但在调用一个特定的Appender之前,以及每一个Appender之中。以一种与防火墙过滤器非常相似的方式,每个过滤器可以返回三个结果之一,Accept, Deny或者Neutral。
虽然事件可能被Filter接受,但事件仍然可能没有被记录。当事件被pre-LoggerConfig Filter接受,但随后被LoggerConfig Filter拒绝或被所有appender拒绝时,就会发生这种情况。
Appender
appender可加性的内容仍然可以参考Logback的。
Layout
类似Logback
StrSubstitutor and StrLookup
StrSubstitutor类和StrLookup接口是从Apache Commons Lang中借来的,然后进行了修改,以支持评估LogEvents。此外,Interpolator类是从Apache Commons Configuration中借来的,以允许StrSubstitutor计算来自多个StrLookups的变量。它也被修改以支持评估LogEvents。它们一起提供了一种机制,允许配置引用来自系统属性、配置文件、ThreadContext映射、LogEvent中的StructuredData的变量。变量可以在处理配置时解析,也可以在处理每个事件时解析(如果组件能够处理的话)。有关更多信息,请参见Lookups 。
log4j2笔记 #01# Architecture的更多相关文章
- 软件测试之loadrunner学习笔记-01事务
loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!
<30天自制操作系统>笔记(01)——hello bitzhuwei's OS! 最初的OS代码 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以 ...
- 《The Linux Command Line》 读书笔记01 基本命令介绍
<The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...
- PHP 学习笔记 01
例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...
- 【技能大赛笔记01】Zigbee点对点按键控制程序开发
[技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...
- JS自学笔记01
JS自学笔记01 1.开发工具 webstorm 2.js(javascript) 是一门脚本.解释性.动态类型.基于对象的语言 含三个部分: ECMAScript标准–java基本语法 DOM(Do ...
- 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】
转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...
- ASP.NET Identity 2集成到MVC5项目--笔记01
Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...
- C++ GUI Qt4学习笔记01
C++ GUI Qt4学习笔记01 qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...
随机推荐
- 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典)--->元组 tuple-->字符串 str
# ### 列表 list 容器类型数据(str字符串, list列表, tuple元组, set集合, dict字典) # (1)定义一个列表 listvar = [] print(listvar, ...
- Scala中 => Unit 与 () =>Unit的区别
() => Unit ---> 是一个函数:=> Unit --> 是一个执行结果为Unit的表达式 code: => Unit是 by name 传递参数.参数是一个返 ...
- Java通过jxl读取Excel
package com.hd.all.test.testjava; import java.io.File; import java.io.IOException; import java.util. ...
- Py-numpy的随机函数【转载】
转自:https://blog.csdn.net/u012149181/article/details/78913167 1. numpy.random.rand() numpy.random.ran ...
- ansible-playbook 快速入门
管理用户密码: --- - hosts: test tasks: - name: changed password shell: echo root:123456 | chpasswd remote_ ...
- [LeetCode] 884. Uncommon Words from Two Sentences_Easy tag: Hash Table
We are given two sentences A and B. (A sentence is a string of space separated words. Each word co ...
- Hibernate框架第三天
**课程回顾:Hibernate第二天** 1. 持久化类和一级缓存 * 持久化类:JavaBean + 映射的配置文件 * 持久化对象的三种状态 * 瞬时态 * 持久态:有自动更新数据的能力 * 托 ...
- sourceInsight工具移除不掉项目 source Insight Add and Remove Project Files
问题描述: sourceInsight创建的项目,有时候会遇到Remove Project 报错,移除不成功的情况. 解决办法: 进入到sourceinsight的安装目录.删除掉保存的工程文件信息即 ...
- 百度编辑器 Ueditor
针对与编辑器里面的图片的存储问题:\ueditor\1.4.3\php\conf.json 文件里面 /* 前后端通信相关的配置,注释只允许使用多行方式 */{/* 上传图片配置项 */“imageA ...
- C# - 匿名对象取值
在new出匿名对象的函数内可以直接调用该匿名对象的属性取值. 可是在其它函数就无法调用匿名对象的属性或方法. 这时,我们可以通过c#的反射机制取值: 文章出处:https://www.cnblogs. ...