patchwork/error-logger

此包已被废弃,不再维护。作者建议使用 symfony/error-handler 包。

高级PHP错误处理和高精度JSON日志记录

dev-master 2014-02-05 07:46 UTC

This package is auto-updated.

Last update: 2021-12-22 18:32:48 UTC


README

以下是五个在Apache 2和GPLv2许可证下的PHP类,专注于PHP错误处理的特定方面。它们共同提供了前所未有的精度,用于记录应用程序内部状态的变化。

为了互操作性和可读性,错误和变量的状态以JSON格式记录。

错误处理

Patchwork\PHP\ErrorHandler

是一个灵活的错误和异常处理程序。

它的默认行为是将错误记录到与致命错误相同的文件中。这样,相同的调试流包含可捕获和不可捕获的致命错误,以易于解析的格式。

每种错误类型都根据四个位字段进行处理

  • 尖叫:控制哪些错误永远不会被 @-silenced - 当位字段允许时,记录在关闭时可以检测到的被静音的致命错误,
  • thrownErrors:控制哪些错误被转换为异常(默认为 E_RECOVERABLE_ERROR | E_USER_ERROR),
  • scopedErrors:控制哪些错误与其本地上下文一起记录,
  • tracedErrors:控制哪些错误与其跟踪一起记录(但对于重复的错误仅记录一次)。

由于错误(即使是被静音的)始终有一定的性能成本,因此所有重复的错误都会被记录,以便开发人员可以看到它们并将它们视为比同类型其他错误更重要的错误。

高精度日志记录

你尝试在输出缓冲区处理程序中导出一个变量吗?任何使用 ob_start()print_r()var_dump() 的错误处理或变量记录代码都会在这种情况下失败。即使是 serialize() 也不可使用,因为一些对象在序列化时会抛出异常。如果你的当前导出程序内部使用 json_encode()(或自PHP 5.3.3以来的 var_export())则可能安全。但即使如此,你仍然无法记录数组/对象中的内部引用,也无法记录资源等详细信息。

由于错误总是在意想不到的情况下发生,因此强大的记录器必须在任何运行上下文中,对于任何变量类型都能正常工作。

为了允许更高的精度,变量是按照JSON约定记录的,以高精度导出任何PHP变量。

为了实现这一点,涉及到几个类

Patchwork\PHP\Logger

将任何消息记录到输出流。

错误消息被特别处理,以便使其更友好,特别是对于跟踪和异常。

已记录的消息只需要有类型和一些关联数据。它们会被发送到JsonDumper对象,该对象将写入您的调试流(但可以是任何其他目的地)。

Patchwork\PHP\JsonDumper

实现了JSON convention to dump any PHP variable with high accuracy

它扩展了Dumper类。

Patchwork\PHP\Dumper

处理回调机制,以获取有关已丢弃对象和资源的详细信息,同时管理深度和长度限制。

它扩展了Walker类。

Patchwork\PHP\Walker

实现了一种机制,可以泛型遍历任何PHP变量。

它考虑了内部引用,无论是递归的还是非递归的,而不会预占发现数据的任何特殊用途。它仅公开一个方法->walk(),用于触发遍历。它还有一个公开属性->checkInternalRefs,默认设置为true,以禁用对内部引用的检查,如果该机制被认为成本太高。检查递归引用和对象/资源不能禁用,但速度更快。

用法

包含bootup.logger.php文件是开始使用这些功能的最简单方法。默认情况下,错误写入到php://stderr,但该文件可供您调整。

此代码来自Patchwork框架,其中它作为调试系统的基石。它以独立的形式发布,希望它可以在不同的环境中成功使用!