Log4j2代码分布分析

Log4j2代码分布分析

以Log4j2的2.14.1版本为例,分析Log4j2的代码分布情况,看看这个主流的开源日志库,其主要精力花在了哪里?其代码分布合理性如何?

统计口径:统计Java代码文件文本行数,注释、空行、纯代码都算在内。

一、Log4j各模块代码占比

模块名JAVA文本行JAVA文本行占比
log4j-1.2-api154495.45%
log4j-api4192614.79%
log4j-api-java96870.24%
log4j-appserver4480.16%
log4j-cassandra6990.25%
log4j-core16239857.28%
log4j-core-its9390.33%
log4j-core-java93740.13%
log4j-couchdb2510.09%
log4j-docker9640.34%
log4j-flume-ng42591.50%
log4j-iostreams48761.72%
log4j-jcl4060.14%
log4j-jdbc-dbcp26460.23%
log4j-jmx-gui7410.26%
log4j-jpa35611.26%
log4j-jpl3340.12%
log4j-jul21270.75%
log4j-kubernetes7430.26%
log4j-layout-template-json146295.16%
log4j-liquibase1840.06%
log4j-mongodb311360.40%
log4j-mongodb49490.33%
log4j-osgi5320.19%
log4j-perf120554.25%
log4j-samples12760.45%
log4j-slf4j-impl19650.69%
log4j-slf4j18-impl16980.60%
log4j-spring-boot5350.19%
log4j-spring-cloud-config6620.23%
log4j-taglib26450.93%
log4j-to-slf4j10310.36%
log4j-web23870.84%

二、log4j-core代码占比

包名用途JAVA文本行JAVA文本行占比
org.apache.logging.log4j.core.appender日志附加器2233921.94%
org.apache.logging.log4j.core.async低延迟异步日志支持37283.66%
org.apache.logging.log4j.core.config配置支持1587315.59%
org.apache.logging.log4j.core.filter过滤器44624.38%
org.apache.logging.log4j.core.impl私有实现46234.54%
org.apache.logging.log4j.core.jacksonjackson序列化支持21092.07%
org.apache.logging.log4j.core.jmxjmx支持20802.04%
org.apache.logging.log4j.core.layout布局70266.90%
org.apache.logging.log4j.core.lookup占位符变量替换查找34743.41%
org.apache.logging.log4j.core.message捕获线程信息2250.22%
org.apache.logging.log4j.core.net支持网络传输与访问46424.56%
org.apache.logging.log4j.core.osgiosgi支持3220.32%
org.apache.logging.log4j.core.parser解码器2930.29%
org.apache.logging.log4j.core.pattern格式串中的模式替换74277.29%
org.apache.logging.log4j.core.script脚本支持6070.60%
org.apache.logging.log4j.core.selector上下文选择子7550.74%
org.apache.logging.log4j.core.time特殊时钟包装实现3350.33%
org.apache.logging.log4j.core.tools命令行工具支持与代码生成支持60815.97%
org.apache.logging.log4j.core.util1238312.16%
org.apache.logging.log4j.core30362.98%

log4j的core包中,包括了太多常见应用所不需要的高级特性,这些特性纳入core包之后,log4j的使用方会被动引入这些代码,而这些代码提供了非常强大的功能,配置文件未开启相关能力,也有可能被别人进行利用。这些代码更像是一个巨型工具集,围绕日志能力,形成了日志从打印开始,到内部传递,格式化,存储,传输,命令行,网络接口等一系列的工具集合,形成了丰富的log4j生态体系。

如果这些生态体系,能够在core之外,让应用开发人员按需引入,或者分层引入,应该会是更好的选择,而不是作为一个包一股脑搞进去,随用随取。在模块层级结构上省的力气,在应用引入jar包上省的力气,与因此而引入的风险相比,不值一提。

任性与取巧是要付出代价的,尤其在底层基础组件领域。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注