davidhavl/dherrorlogging

为 ZF2/ZF3 应用程序提供的全功能错误日志模块

2.2.2 2018-01-18 00:01 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:49:38 UTC


README

Latest Version Downloads

简介

全功能错误日志模块,适用于 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

  • 测试。是的,编写代码很无聊,但这是必要的。