初识log4j1.x

研究源码首先要对项目要有整体的认识,这一章节主要让大家对log4j1.x有一个整体的认识,并以此为切入点,认识log4j1.x的真个框架

1 整体认识

先整体上对log4j1有一个整体的认识,然后再在后面对log4j的研究中逐渐加深对其的理解。先不必纠结在整体的类图和流程图中。

(这里类图和流程从简,能够表达内容即可)

1.1 打印日志流程图

流程说明:

-第一步: 初始化Logger容器LoggerRepository,默认为Hierachy,跟节点是RootLogger

-第二步: 获取Logger实例,调用LogManager.getLogger()获得Logger实例,存在直接返回,不存在创建返回

-第三步: 判断是否打印日志(请求打印日志的Level要高于或者等于Logger的级别,请求打印日志语句才能生效),Logger实例的所有Appender按照Layout的格式输出日志

1.2 类图

类图说明:

  • LoggerFactory : Logger的工厂,用来获得Logger实例

  • LoggerRepository: Logger的容器

  • RepositorySelector: 获取Logger容器

  • LogManager: Logger的管理中心,获取Logger容器、Logger实例、RootLogger

  • Logger: 日志记录器

  • Appender: 日志输出目的地

  • Layout: 日志输出格式

2 搭建环境

创建maven项目,加入依赖:


<!-- Log4j1 日志框架包 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>

3 代码示例(以此为切入点了解架构)


public class BasicConfiguratorDemo { private static final Logger LOGGER =Logger.getLogger(BasicConfiguratorDemo.class); public static void main(String[] args){ BasicConfigurator.configure(); LOGGER.info("Hello World"); } }

输出结果:


1 [main] INFO com.log.log4j.configure.BasicConfiguratorDemo - Hello World

4 代码运行流程

4.1 获取Logger流程(Logger.getLogger(BasicConfiguratorDemo.class))

4.2 BasicConfigurator.configure()配置流程

获得RootLogger,添加ConsoleAppender,由于继承关系,其他Logger的父Logger都是RootLogger.所以其他Logger的Appender都是这里定义的ConsoleAppender


public static void configure() { Logger root = Logger.getRootLogger(); root.addAppender(new ConsoleAppender( new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN))); }

4.3 打印Hello World(LOGGER.info("Hello World"))流程

源码:


public void info(Object message) { if(repository.isDisabled(Level.INFO_INT)) return; if(Level.INFO.isGreaterOrEqual(this.getEffectiveLevel())) forcedLog(FQCN, Level.INFO, message, null); } //Level具有继承特性,如果Logger本身没有设置Level,会继承父Logger的Level,Logger至少有一个Parent(RootLogger),具体参考log4j文档 public Level getEffectiveLevel() { for(Category c = this; c != null; c=c.parent) { if(c.level != null) return c.level; } return null; // If reached will cause an NullPointerException. }

流程:

Log4j1.x初识的更多相关文章

  1. Android动画效果之初识Property Animation(属性动画)

    前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...

  2. 初识Hadoop

    第一部分:              初识Hadoop 一.             谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...

  3. python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)

    一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...

  4. 初识IOS,Label控件的应用。

    初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...

  5. UI篇(初识君面)

    我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...

  6. Python导出Excel为Lua/Json/Xml实例教程(一):初识Python

    Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...

  7. 初识SpringMvc

    初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...

  8. 初识redis数据类型

    初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...

  9. Redis初识、设计思想与一些学习资源推荐

    一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...

随机推荐

  1. [80Sec]深掘XSS漏洞场景之XSS Rootkit

    顶80SEC的牛. 深掘XSS漏洞场景之XSS Rootkit[完整修订版] EMail: rayh4c#80sec.com Site: http://www.80sec.com Date: 2011 ...

  2. Jpeglib读取jpg文件 【转】

    http://blog.csdn.net/blues1021/article/details/45424695 整理自 : http://hi.baidu.com/lewutian/item/e8ee ...

  3. 百度编辑器同一id重复调用不能生效的办法

    在使用js 调用表单组件模板的时候,表单内有一个编辑框 第一次调出的时候,百度编辑器正常显示,关闭后,再打开,百度编辑器不能显示 原因:第一次使用的时候, UE.getEditor('node_con ...

  4. 【Javascript】js图形编辑器库介绍

    10个JavaScript库绘制自己的图表 jopen 2015-04-06 18:18:38 • 发布 摘要:10个JavaScript库绘制自己的图表 JointJS JointJS is a J ...

  5. 用sencha touch的Cmd创建的MVC工程需要注意的问题

    用ST的cmd创建的js文件都是ANSI编码格式的,所以导致无法正常显示中文.例如传输的参数为中文时就为乱码,导致各种问题... 解决办法:将js文件用记事本打开,另存为,选择编码为UTF-8,覆盖原 ...

  6. Spring Boot + Spring Data + Elasticsearch实例

    Spring Boot + Spring Data + Elasticsearch实例 学习了:https://blog.csdn.net/huangshulang1234/article/detai ...

  7. JAVA简单选择排序算法原理及实现

    简单选择排序:(选出最小值,放在第一位,然后第一位向后推移,如此循环)第一位与后面每一个逐个比较,每次都使最小的置顶,第一位向后推进(即刚选定的第一位是最小值,不再参与比较,比较次数减1) 复杂度: ...

  8. 搭建dubbo-admin-2.5.3

    dubbo管理界面 一,安装zookeeper 1,下载包zookeeper-3.3.3.tar.gz 2,解压 tar zxvf zookeeper-3.3.3.tar.gz cd zookeepe ...

  9. 如何使用WinDriver为PCIe采集卡装驱动

    如何使用WinDriver为PCIe采集卡装驱动 第一步:使用WinDriver生成驱动 1.运行Drier Wizard 2.点击New host driverproject 3.在列表中,选择待安 ...

  10. 重载&lt;&lt;和&gt;&gt;

    在C++编程中实现数据的输入/输出能够用cin>>ch/cout<<ch; 可是使用cin>>ch或cout<<ch并不能实现一些特殊的数据的输入或者输 ...