davidhavl / dherrorlogging
为 ZF2/ZF3 应用程序提供的全功能错误日志模块
Requires
- php: ^5.6 || ^7.0
- container-interop/container-interop: ^1.1
- zendframework/zend-config: ^2.6 || ^3.0
- zendframework/zend-console: ^2.6 || ^3.0
- zendframework/zend-db: ^2.6 || ^3.0
- zendframework/zend-http: ^2.5 || ^3.0
- zendframework/zend-json: ^2.6 || ^3.0
- zendframework/zend-log: ^2.6 || ^3.0
- zendframework/zend-mail: ^2.6 || ^3.0
- zendframework/zend-modulemanager: ^2.7 || ^3.0
- zendframework/zend-mvc: ^2.6 || ^3.0
- zendframework/zend-servicemanager: ^2.7 || ^3.0
- zendframework/zend-view: ^2.6 || ^3.0
This package is not auto-updated.
Last update: 2024-09-28 15:49:38 UTC
README
简介
全功能错误日志模块,适用于 ZF2/ZF3 MVC 应用程序。
功能
- 记录框架特定异常(在分发或渲染生命周期中)
- 记录其他异常
- 记录 PHP 错误
- 记录致命错误或解析错误(在分发或渲染生命周期之外)
- 可以通过配置设置选择要记录或不要记录的 PHP E_* 错误(例如:不要记录 E_USER_DEPRECATED 错误)
- 模块向最终日志中添加了多个有用的信息,例如 IP、请求、调用的 URL、会话 ID、堆栈跟踪等
- 可以通过日志写入器选择多个日志目的地,例如(数据库、电子邮件、文件、chromephp、'fingerscrossed'、'firephp'、'mail'、'mock'、'null'、'syslog'、'zendmonitor')
- 除了 ZF 提供的其他默认日志写入器之外,还包括自定义数据库日志写入器
- 包括自定义 Doctrine 日志写入器
- 包括内容协商(例如:对 JSON 请求渲染 JSON 响应,对控制台请求渲染控制台响应,对其他请求渲染 HTML 响应等)
- 可以向用户显示一个包含错误代码的精美错误页面(有助于在向您报告问题时识别问题)
- 为每种错误/异常类型提供精美的错误页面模板(分发、渲染、异常、错误、致命、控制台、json)
安装
- 将
"davidhavl/dherrorlogging": "^2.0"
添加到您的 composer.json 的 require 部分 - 在您的 application.config.php(或 ZF3 框架应用的 modules.config.php)中的模块数组中添加
'DhErrorLogging'
(在添加任何其他自定义模块之前,或尽可能靠近顶部)。 - 如果您已为您的项目设置了一个 ./config/autoload/ 目录,您可以从配置目录中删除
dherrorlogging.global.php.dist
(将其重命名为dherrorlogging.global.php
)配置文件,并根据您的需求更改值。 - 至少启用一个日志写入器(在
dherrorlogging.global.php
的 "log_writers" 部分)。 - 为了在您的自定义异常模板(error/404、error/index)中显示错误参考,请确保 echo 错误参考变量 errorReference; ?>
注意
通过 dherrorlogging.global.php
,您可以完全启用/禁用日志记录功能,或者仅禁用某些类型的错误/异常。您还可以配置其他一些事情,例如错误或日志写入器的模板路径。您还可以根据需要覆盖记录器、处理器、参考生成器或响应发送器(如果您知道自己在做什么)。
当添加新的日志写入器时,您可以在 '['dherrorlogging']['log_writers']' 部分添加新的配置数组,为某些标准 ZF2 写入器添加新的配置数组,这些写入器不需要注入其他对象(stream、chromephp、'fingerscrossed'、'firephp'、'mail'、'mock'、'null'、'syslog'、'zendmonitor'),或者添加您自己的已注册日志写入器工厂的标识符(在主配置部分的 ['log_writers'] 中注册)。
为了使错误页面返回 http 状态码 500,您应该将 PHP 的 display_errors 设置为 off。
示例数据库写入器设置
假设您想通过zend db将日志记录到数据库。我已经提供了一个内置的自定义数据库日志写入器(DhErrorLogging\DbWriter
),所以您只需要在配置目录下的新dherrorlogging.global.php文件中取消注释数据库部分(第71-91行),以便模块知道您想使用数据库。最后,如果您使用MySQL,可以使用下面的SQL模式(也在/data/sql目录中找到)来创建数据库中的日志表。
CREATE TABLE IF NOT EXISTS `error_log` ( `log_id` int(11) NOT NULL AUTO_INCREMENT, `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `reference` varchar(6) DEFAULT '', `type` varchar(10) DEFAULT 'ERROR', `priority` varchar(6) DEFAULT 'DEBUG', `message` text, `file` text, `line` varchar(12), `trace` text, `xdebug` text, `uri` text, `request` text, `ip` varchar(45) DEFAULT NULL, `session_id` varchar(255) DEFAULT NULL, PRIMARY KEY (`log_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
或者使用您自己的表和字段名,但请确保相应地调整['db']['options']['table_name']
和['db']['options']['table_map']
。另外,请确保zend db适配器别名(dherrorlogging.global.php的第191行)设置为您正在使用的适配器。
示例Doctrine写入器设置
我已经提供了一个内置的自定义Doctrine日志写入器(DhErrorLogging\Writer\DoctrineWriter
),所以您只需要取消注释新dherrorlogging.global.php中的Doctrine部分(第100-102行),并运行doctrine update命令以创建新表。请确保doctrine实体管理器别名(dherrorlogging.global.php的第199行)设置为您正在使用的别名。
从v1到v2的迁移
版本2在很大程度上是一个完整的重写。以下内容也已添加:
- 错误类型启用/禁用,
- 异常过滤器,
- 模块选项,
- 响应发送器(根据来源或请求接受头部发送不同的响应)
关于设置,以下内容已被弃用:['dherrorlogging']['priority']。如果您使用自己的日志实现,可以轻松重新启用此功能。
贡献
想要让它变得更好或更精致吗?请随意发送pull request。我总是很高兴与他人合作或听取反馈。不知道从哪里开始?或许可以帮忙编写测试。
TODO
- 测试。是的,编写代码很无聊,但这是必要的。