Apache log4php 2.3.0 介绍与选型指南

Apache log4php 2.3.0(终版):Log4j 血统的 PHP 日志框架,2020-12-14 起进入休眠(dormant)状态、未进入 Apache Attic;讲清架构特性与归档制品获取路径,并给出与 Monolog、PSR-3 生态的量化替代选型对比。

Apache log4phplog4phpApachePHP日志2026/10/19

Apache log4php 2.3.0 介绍与选型指南

目标:基于官方来源讲清 Apache log4php 的项目定位、休眠现状(dormant)与 Attic 状态澄清、核心架构、关键特性与归档制品获取路径,并给出以 Monolog 与 PSR-3 生态为主的量化替代选型对比。本文为认知篇,全部论断基于 Apache 官网、官方仓库 README 与 Packagist 联网溯源(查询日期 2026-10-19),不做本地安装实测。

一、信息基准

本章给齐本文所有版本号与状态判断的溯源基准,后续各章数字均以此为准。

  • 查询日期:2026-10-19(本文所有版本号、星标数、日期均在该日联网核验)。
  • 基准版本:2.3.0(项目终版)——Packagist 上 apache/log4php 的最新稳定版即 2.3.0,Git 标签日期 2012-10-26(来源:https://packagist.org/packages/apache/log4php );此后 13 年再无任何新版本。
  • 维护方:原为 Apache Logging Services 项目的子项目;项目状态:休眠(dormant)——官方仓库 README 明示 "Apache log4php was moved to dormant status on December 14, 2020. No pull requests or issues will be reviewed or acted upon."(来源:https://packagist.org/packages/apache/log4php 所镜像的官方 README,查询日期 2026-10-19)。
  • Attic 状态澄清(重要):经逐项核验 Apache Attic 官方项目目录(https://attic.apache.org/projects/ ,a→x 全列表),其中没有 log4php——log4php 未进入 Apache Attic,其官方状态是 Logging Services 旗下"inactive subproject"(休眠子项目,来源:https://logging.apache.org/ 项目清单中 Log4php 列于"inactive subprojects"折叠区)。这与"Attic 退役"是两种不同的官方状态:Attic 是项目生命周期终点的只读托管,而休眠子项目名义上仍挂在原 PMC 下但无任何开发活动。
  • 许可:Apache License 2.0(ASF 项目标准许可,仓库随附 LICENSE)。
  • 发行形态:纯 PHP 库(无独立进程、无扩展强依赖);历史发行包归档于 https://archive.apache.org/dist/logging/log4php/2.3.0/ ;Composer 包 apache/log4php 在 Packagist 上已被标记为 abandoned("no longer maintained, no replacement package was suggested",来源:https://packagist.org/packages/apache/log4php )。
  • 版本依据:

二、软件概述

2.1 项目定位与休眠现状

Apache log4php 官方定位是"a versatile logging framework for PHP",最初作为 Log4j 的 PHP 移植诞生,后加入 PHP 特有功能;2010 年 3 月自 Apache Incubator 毕业成为 Logging Services 子项目(来源:官方项目站 https://logging.apache.org/log4php/ ,查询日期 2026-10-19)。

休眠现状必须先讲清:2020 年 12 月 14 日项目被正式移入 dormant 状态,官方 README 明言此后不再评审、不处理任何 pull request 与 issue(来源:官方 README,经 Packagist 镜像核验,查询日期 2026-10-19)。ASF 董事会 Logging Services 纪要亦记录"In December, we moved the Log4PHP subproject to dormant status",且近期纪要中 Logging Services 的活跃项目清单只列 log4cxx、log4net、Log4j 三个(来源:https://whimsy.apache.org/board/minutes/Logging_Services )。终版 2.3.0 距今已超过 13 年,Packagist 包已被标记 abandoned。结论:本文标题保留终版号 2.3.0,仅作存量维护参考,新项目请直接看第六、七章的替代方案。

2.2 与 Log4j 家族的血统关系及 Log4Shell 影响范围

Apache Logging Services 旗下子项目关系(来源:https://logging.apache.org/ ,查询日期 2026-10-19):

  • Log4j 2.x:Java 日志框架本体,当前最新 2.25.5(2026-07-06,来源:https://github.com/apache/logging-log4j2/releases.atom );1.x 老线已于 2015 年 8 月 EOL。
  • Log4cxx / log4net:C++ 与 .NET 移植,独立代码库。
  • Log4php:PHP 移植(本文主角,官方描述"Originally a port of Log4j to PHP"),已休眠。

Log4Shell 影响范围:2021 年底的 Log4Shell 漏洞(CVE-2021-44228)只影响 Java 版 Log4j 2.x(2.0-beta9 至 2.14.1 区间),根因是 Log4j 2.x 的 JNDI lookup 功能。log4php 是独立的 PHP 代码库,不运行在 JVM 上、不含 JNDI,不受 Log4Shell 影响(漏洞信息以官方安全页为准:https://logging.apache.org/security.html )。但"与 Log4Shell 无关"不等于"可以继续用于新项目"——项目休眠本身已是更大的选型风险。

2.3 版本节奏

Packagist 版本列表显示(来源:https://packagist.org/packages/apache/log4php ,查询日期 2026-10-19):2.0.0 → 2.1.0 → 2.2.0 → 2.2.1 → 2.3.0(2012-10-26,终版)。即 2.x 线在 2011-2012 年间活跃发版后戛然而止;此后仅有 2022-03-15 的一次仓库元数据更新,再无代码活动。一个 2013 年后零发版、2020 年后零治理的日志库,与 PHP 语言本身(PHP 7/8 的现代化)已明显脱节。

三、核心架构

log4php 复刻 Log4j 的"层级 Logger + 输出管道"模型,以下依据官方项目站的架构与功能描述归纳(来源:https://logging.apache.org/log4php/ ,查询日期 2026-10-19)。

3.1 Logger 与配置模型

Logger 按名字分级,支持通过三种配置载体定义日志行为:XML 文件、properties 文件或 PHP 文件(官方站:"Configuration through XML, properties or PHP files")。运行时按配置将不同模块的日志路由到不同目的地与级别。

3.2 Appender(输出目的地)

官方站列出的内置目的地:控制台(stdout/stderr)、文件(含按日与滚动文件)、邮件、数据库、socket、syslog。与 Log4j 一致,一个 Logger 可同时挂接多个 Appender。

3.3 Layout 与诊断上下文

  • Layout(格式化):内置 HTML、XML 与用户自定义 pattern 格式(官方站:"Several built-in log message formats")。
  • NDC / MDC:官方站明确支持嵌套诊断上下文(Nested Diagnostic Contexts)与映射诊断上下文(Mapped Diagnostic Contexts),用于在请求链路中携带上下文信息。

四、关键特性

以下特性均出自官方项目站描述(查询日期 2026-10-19),均以终版 2.3.0 为上限:

  • 多格式配置文件(XML / properties / PHP);
  • 六类输出目的地(控制台、文件、邮件、数据库、socket、syslog);
  • 多种输出格式(HTML、XML、自定义 pattern);
  • NDC 与 MDC 诊断上下文;
  • 纯 PHP 实现,Packagist 包元数据显示 PHP 版本要求 >= 5.2.7(来源:https://packagist.org/packages/apache/log4php )。

💡 说明:以上是"它曾经有什么"。需要同时看到"它已经停在哪"——终版停留在 PHP 5.2.7 时代,未适配 PHP 8 的类型体系与异常模型演进,这是休眠项目与新语言版本之间的核心鸿沟。

五、快速上手(归档制品获取)

前提认知:项目休眠、Composer 包已标记 abandoned,本节仅描述"如何获取归档制品",不存在官方推荐的新部署路径。(查询日期 2026-10-19)

途径 A:Apache 归档发行目录。 终版发行包归档于 https://archive.apache.org/dist/logging/log4php/2.3.0/(来源:https://archive.apache.org/dist/logging/log4php/ 目录核验)。归档页顶部有官方警示:"THEY MAY BE UNSUPPORTED AND UNSAFE TO USE"。

途径 B:Composer(仅存量系统)。 composer require apache/log4php 仍可解析到 2.3.0,但 Packagist 页明确标记该包 abandoned 且"no replacement package was suggested"(来源:https://packagist.org/packages/apache/log4php )。

最小用法形态(转述自官方项目站的功能描述,认知篇不做本地实测):引入库后,通过 XML/properties/PHP 配置文件声明 Appender 与级别,代码内按名取 Logger 输出日志,可用 NDC/MDC 携带请求上下文。

⚠️ 注意:PHP 官方已终止 5.x/7.x 系列的安全支持,2.3.0 的依赖区间(>=5.2.7)与现代 PHP 运行时的适配完全靠使用方自行验证。存量系统建议尽快按第七章完成替代迁移。

六、适用场景与限制

明确结论:不建议任何新项目采用 log4php。 理由与场景边界如下:

  • 休眠治理状态:2020-12-14 起 dormant,官方明言不再处理任何 PR/issue(来源:官方 README);虽未进 Attic,但治理实质与退役无异;
  • 终版 2.3.0 已 13 年无更新,落后于 PHP 7/8 两个语言大代际;
  • Composer 包 abandoned,无官方指定继任;
  • 现代替代成熟:PHP 生态的日志事实标准是 PSR-3 接口 + Monolog 实现(详见第七章),主流框架日志栈均基于此组合。

仅存的适用情形:运行在旧 PHP 运行时、短期内无法重构的遗留系统,可继续使用 2.3.0 维持现状,但应将其列入技术债并规划迁移。

七、同类选型对比

PHP 日志生态量化对比(数据联网实查,查询日期 2026-10-19;星标数取自 shields.io GitHub badges,版本取自 Packagist 官方源,许可以各仓库 LICENSE 为准):

项目许可最新版本(查询日期口径)GitHub Stars版本节奏兼容矩阵要点
Apache log4php(休眠)Apache-2.02.3.0(2012-10-26,终版)99(贡献者 10)2013 年起零发版PHP >= 5.2.7;Packagist 包 abandoned(累计安装约 977 万次)
MonologMIT(monolog 仓库 LICENSE 为准)3.12.121k持续高频发版PSR-3 实现;支持 PHP 8.x;handler/processor 体系覆盖文件、syslog、socket、消息队列等数十种目的地
PSR-3 接口(psr/log)MIT(psr/log 仓库 LICENSE 为准)3.0.2—(接口标准包)随 PHP-FIG 规范演进日志接口标准:LoggerInterface 八个级别方法;实现库可插拔

数据来源:https://packagist.org/packages/apache/log4php 、https://packagist.org/packages/monolog/monolog 、https://packagist.org/packages/psr/log 、https://github.com/Seldaek/monolog ,查询日期 2026-10-19。

选型建议:

  • 一切新 PHP 项目:直接采用 PSR-3 接口 + Monolog 实现组合——接口标准保证可替换性,Monolog 的 21k 星与高频发版提供生态与维护保障;
  • 使用 Symfony/Laravel 等现代框架:框架日志栈本身即基于 Monolog,无需引入额外日志库;
  • 需要 log4j 风格的 NDC/MDC 能力:Monolog 提供 processor 机制(如 IntrospectionProcessor、WebProcessor)覆盖同类上下文注入需求;
  • 存量 log4php 系统:维持 2.3.0 仅作过渡,按"接口先行(引入 psr/log 适配)→ 实现切换(Monolog)→ 配置迁移"的顺序逐步替换。

八、参考链接