Log4j1.x初识
初识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初识的更多相关文章
- Android动画效果之初识Property Animation(属性动画)
前言: 前面两篇介绍了Android的Tween Animation(补间动画) Android动画效果之Tween Animation(补间动画).Frame Animation(逐帧动画)Andr ...
- 初识Hadoop
第一部分: 初识Hadoop 一. 谁说大象不能跳舞 业务数据越来越多,用关系型数据库来存储和处理数据越来越感觉吃力,一个查询或者一个导出,要执行很长 ...
- python学习笔记(基础四:模块初识、pyc和PyCodeObject是什么)
一.模块初识(一) 模块,也叫库.库有标准库第三方库. 注意事项:文件名不能和导入的模块名相同 1. sys模块 import sys print(sys.path) #打印环境变量 print(sy ...
- 初识IOS,Label控件的应用。
初识IOS,Label控件的应用. // // ViewController.m // Gua.test // // Created by 郭美男 on 16/5/31. // Copyright © ...
- UI篇(初识君面)
我们的APP要想吸引用户,就要把UI(脸蛋)搞漂亮一点.毕竟好的外貌是增进人际关系的第一步,我们程序员看到一个APP时,第一眼就是看这个软件的功能,不去关心界面是否漂亮,看到好的程序会说"我 ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 初识SpringMvc
初识SpringMvc springMvc简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 s ...
- 初识redis数据类型
初识redis数据类型 1.String(字符串) string是redis最基本的类型,一个key对应一个value. string类型是二进制安全的.意思是redis的string可以包含任何数据 ...
- Redis初识、设计思想与一些学习资源推荐
一.Redis简介 1.什么是Redis Redis 是一个开源的使用ANSI C 语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的API.从2010 年 ...
随机推荐
- VLAN讲解
VLAN(Virtual Local Area Network)的中文名为"虚拟局域网".VLAN是一种将局域网设备从逻辑上划分成一个个网段,从而实现虚拟工作组的新兴数据交换技术. ...
- FXC Define的使用方法
https://docs.microsoft.com/en-us/windows/desktop/direct3dtools/dx-graphics-tools-fxc-syntax https:// ...
- DevExpress 自动匹配宽度,及其他使用笔记
摘自: http://blog.sina.com.cn/s/blog_53b58e7c0101avl4.html GridControl列自动匹配宽度 -- : 327人阅读 评论() 收藏 举报 / ...
- Linux115条常用命令
1,echo “aa” > test.txt 和 echo “bb” >> test.txt //>将原文件清空,并且内容写入到文件中,>>将内容放到文件的尾部2, ...
- Python 爬取外文期刊论文信息(机械 仪表工业)
NSTL国家科技图书文献中心 2017 机械 仪表工业 所有期刊论文信息 代码比较随意,不要介意 第一步,爬取所有期刊链接 #coding=utf-8 import time from se ...
- Razor语法(三)
1.定义变量 定义变量或声明常量必须在代码体内,代码体以'@{'开头,以'}'结束,其中定义变量以'var'进行声明.代码体内每行以';'做为结束标识. @{ var i = 10; ...
- 转:ios的图片文件上传代码
转自: https://gist.github.com/igaiga/1354221 @interface ImageUploader : NSObject { NSData *theImage; } ...
- [Webpack] Detect Unused Code with Webpack and unused-files-webpack-plugin
As you refactor and modify applications, it's difficult to manage and keep track of files as they be ...
- Js和html相结合的方式
目录 TOC \o "1-3" \h \z \u js和html相结合的方式. PAGEREF _Toc455386178 \h 1 08D0C9EA79F9BACE118C82 ...
- 利用jspx解决jsp后缀被限制拿shell
有些struts2的站在web.xml里面设置url是jsp的格式就自动跳转主页的action,转换jsp后缀大小写还不解析.查了查有Tomcat默认jspx可以解析.看了看jspx的手册,那就好说了 ...