博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Log4j1.x初识
阅读量:5905 次
发布时间:2019-06-19

本文共 2143 字,大约阅读时间需要 7 分钟。

初识log4j1.x

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

1 整体认识

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

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

1.1 打印日志流程图

1043381-20161015215936343-1148898726.png

流程说明:

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

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

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

1.2 类图

1043381-20161015215954109-762894012.png

类图说明:

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

  • LoggerRepository: Logger的容器

  • RepositorySelector: 获取Logger容器

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

  • Logger: 日志记录器

  • Appender: 日志输出目的地

  • Layout: 日志输出格式

2 搭建环境

创建maven项目,加入依赖:

log4j
log4j
1.2.17

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 代码运行流程

1043381-20161015220020609-434481958.png

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

1043381-20161015220037906-241004034.jpg

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. }

流程:

1043381-20161015220054781-1780373896.jpg

转载于:https://www.cnblogs.com/beginmind/p/5965436.html

你可能感兴趣的文章
BeanUtils\DBUtils
查看>>
python模块--os模块
查看>>
Java 数组在内存中的结构
查看>>
《关爱码农成长计划》第一期报告
查看>>
学习进度表 04
查看>>
谈谈javascript中的prototype与继承
查看>>
时序约束优先级_Vivado工程经验与各种时序约束技巧分享
查看>>
minio 并发数_MinIO 参数解析与限制
查看>>
flash back mysql_mysqlbinlog flashback 使用最佳实践
查看>>
mysql存储引擎模式_MySQL存储引擎
查看>>
java 重写system.out_重写System.out.println(String x)方法
查看>>
配置ORACLE 11g绿色版客户端和PLSQL远程连接环境
查看>>
ASP.NET中 DataList(数据列表)的使用前台绑定
查看>>
Linux学习之CentOS(八)--Linux系统的分区概念
查看>>
System.Func<>与System.Action<>
查看>>
asp.net开源CMS推荐
查看>>
csharp skype send message in winform
查看>>
MMORPG 游戏服务器端设计--转载
查看>>
HDFS dfsclient写文件过程 源码分析
查看>>
ubuntu下安装libxml2
查看>>