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的更多相关文章

  1. 软件测试之loadrunner学习笔记-01事务

    loadrunner学习笔记-01事务<转载至网络> 事务又称为Transaction,事务是一个点为了衡量某个action的性能,需要在开始和结束位置插入一个范围,定义这样一个事务. 作 ...

  2. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!

    <30天自制操作系统>笔记(01)——hello bitzhuwei's OS! 最初的OS代码 ; hello-os ; TAB=4 ORG 0x7c00 ; 指明程序的装载地址 ; 以 ...

  3. 《The Linux Command Line》 读书笔记01 基本命令介绍

    <The Linux Command Line> 读书笔记01 基本命令介绍 1. What is the Shell? The Shell is a program that takes ...

  4. PHP 学习笔记 01

    例子: 为什么要学PHP 主观原因: 前段时间在学校处理了毕业的一些事情,回到上海后开始了找工作的旅程.意向工作是WPF开发或者ASP.NET 作为后端的WEB开发. 陆陆续续一直在面试,其中有一家公 ...

  5. 【技能大赛笔记01】Zigbee点对点按键控制程序开发

    [技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...

  6. JS自学笔记01

    JS自学笔记01 1.开发工具 webstorm 2.js(javascript) 是一门脚本.解释性.动态类型.基于对象的语言 含三个部分: ECMAScript标准–java基本语法 DOM(Do ...

  7. 《30天自制操作系统》笔记(01)——hello bitzhuwei’s OS!【转】

    转自:http://www.cnblogs.com/bitzhuwei/p/OS-in-30-days-01-hello-bitzhuwei-OS.html 阅读目录(Content) 最初的OS代码 ...

  8. ASP.NET Identity 2集成到MVC5项目--笔记01

    Identiry2是微软推出的Identity的升级版本,较之上一个版本更加易于扩展,总之更好用.如果需要具体细节.网上具体参考Identity2源代码下载 参考文章 在项目中,是不太想直接把这一堆堆 ...

  9. C++ GUI Qt4学习笔记01

    C++ GUI Qt4学习笔记01   qtc++signalmakefile文档平台 这一章介绍了如何把基本的C++只是与Qt所提供的功能组合起来创建一些简单的图形用户界面应用程序. 引入两个重要概 ...

随机推荐

  1. Android 7.0下,拍摄照片报错

    对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI.如果一项包含文件 URI 的 intent 离开 ...

  2. 纯真IP数据库格式详解 附demo

    纯真版IP数据库,优点是记录多,查询速度快,它只用一个文件QQWry.dat就包含了所有记录,方便嵌入到其他程序中,也方便升级.缺点是你想要编辑它却是比较麻烦的,由于其文件格式的限制,你要直接添加IP ...

  3. 【LeetCode每天一题】Trapping Rain Water(获得雨水的容量)

    Given n non-negative integers representing an elevation map where the width of each bar is 1, comput ...

  4. mac本的环境基本完成大部分了

    1.禅道的部署,技术上最难搞 session 目录存储目录不存在的处理 终端:open /et 前往——>前往文件夹——〉/资源库/WebServer/Documents/ 在tem目录下新建文 ...

  5. [Java in NetBeans] Lesson 16. Exceptions.

    这个课程的参考视频和图片来自youtube. 主要学到的知识点有: We want to handle the bad Error. (e.g bad input / bugs in program) ...

  6. React.createClass 、React.createElement、Component

    react里面有几个需要区别开的函数 React.createClass .React.createElement.Component 首选看一下在浏览器的下面写法: <div id=" ...

  7. nodejs+mysql入门实例(表的查询)

    //连接数据库 var mysql = require('mysql'); var connection = mysql.createConnection({ host: '******', //数据 ...

  8. 网络编程之Socket的TCP协议实现客户端与客户端之间的通信

    我认为当你学完某个知识点后,最好是做一个实实在在的小案例.这样才能更好对知识的运用与掌握 如果你看了我前两篇关于socket通信原理的入门文章.我相信对于做出我这个小案列是完全没有问题的!! 既然是小 ...

  9. sqli-labs(十三)(hpp)

    第二十九关 这关说的是有waf,其实只是模拟waf的场景,就是说waf处理的变量和后台程序接受的变量不一致. 考验的参数污染,具体可以参考其他文章关于HPP的解释. 先看源码吧: 输入?id=1&am ...

  10. javascript获取style兼容性问题

    获取css 样式的方法有三种 : style, currentStyle , getComputedStyle style (无兼容性问题) 获取语法: ele.style.attr : 设置语法:e ...