underpin / logger-loader
Underpin的日志加载器
Requires
- underpin/underpin: ^2.0
This package is auto-updated.
Last update: 2024-09-22 19:08:19 UTC
README
帮助WordPress网站添加日志记录器的加载器。
安装
使用Composer
composer require underpin/loaders/logger
手动
此插件使用内置自动加载器,因此只要在Underpin之前要求,它应该可以按预期工作。
require_once(__DIR__ . '/underpin-logger/logger.php');
设置
- 安装Underpin。请参阅Underpin文档
- 根据需要注册新的事件类型。
调试日志记录器
如果您已登录,并在任何URL末尾添加underpin_debug=1
,则在管理栏中会出现“Underpin事件”按钮。这提供了一个调试界面,可以输出请求中注册的所有项目以及请求中记录的任何事件。这种上下文在生产环境中特别有用,因为调试可能很困难。
事件日志实用工具
此插件包含一个实用工具,可以使在此插件中记录事件成为可能。这些日志写入到wp_uploads
目录中的文件,并附带一个cron作业,可以自动清除旧日志。此外,可以通过创建自定义Writer类来扩展日志记录器保存数据的方法。
使用错误日志记录器
此插件包含3种事件类型 - error
、warning
和notice
。将error
事件写入日志,而warning
或notice
仅在启用WP_DEBUG
时显示在屏幕控制台中。这允许您添加大量notices
和warnings
,而不会因大量的文件写入而使系统负担过重。
要写入日志记录器,只需将它们链接到logger
方法。
plugin_name_replace_me()->logger()->log( 'error', 'error_code', 'error_message', ['arbitrary' => 'data', 'that' => 'is relevant', 'ref' => 1] );
您还可以直接记录WP_Error
对象。
$error = new \WP_Error('code','Message',['data' => 'to use']); plugin_name_replace_me()->logger()->log_wp_error('error',$error);
还可以捕获捕获的异常。
try{ echo 'hi'; }catch(Exception $e ){ plugin_name_replace_me()->logger()->log_exception('error', $e); }
默认情况下,日志记录器将返回一个Log_Item
类,但您也可以通过使用log_as_error
来返回一个WP_Error
对象。
$wp_error_object = plugin_name_replace_me()->logger()->log_as_error( 'error', 'error_code', 'error message', ['arbitrary' => 'data', 'that' => 'is relevant'] ); var_dump($wp_error_object); // WP_Error...
注意:将动态数据包含在错误消息中是一种不良做法。这可能会影响使用记录事件进行日志记录的日志记录器工具,并导致检查过去发生过的相同事件的日志记录器工具不必要的膨胀。相反,请将相关数据放在第4个参数的data
数组中。
错误
$wp_error_object = plugin_name_replace_me()->logger()->log_as_error( 'error', 'invalid_product', 'The product ID ' . $id . ' is invalid' );
正确
$wp_error_object = plugin_name_replace_me()->logger()->log_as_error( 'error', 'invalid_product', 'An invalid product was referenced', ['product_id' => $id] );
收集错误
有时,您将连续运行几个可能返回错误的函数。收集错误将它们组合成一个单独的WP_Error
对象,如果它们实际上是错误。
$item_1 = function_that_returns_errors(); $item_2 = another_function_that_returns_errors(); $errors = underpin()->logger()->gather_errors($item_1,$item_2); if($errors->has_errors()){ // Do do something if either of the items were a WP Error. } else{ // All clear, proceed. }
事件类型
如果您想记录不适合任何三个默认值的事情,则可以注册自己的自定义事件类型。一个常见的例子是在后台进程运行时,最好有一个日志记录其运行时间和发生了什么。
为此,您需要创建一个自定义事件类型。这是通过扩展Event_Type
类来完成的。
namespace Plugin_Name_Replace_Me\Event_Types; /** * Class Background_Process * Error event type. * * @since 1.0.0 * * @since * @package */ class Background_Process extends Event_Type { /** * Event type * * @since 1.0.0 * * @var string */ public $type = 'background_process'; /** * Writes this to the log. * Set this to true to cause this event to get written to the log. * * @since 1.0.0 * * @var bool */ protected $write_to_log = true; /** * @var inheritDoc */ public $description = 'Logs when background processes run.'; /** * @var inheritDoc */ public $name = "Background Processes"; }
然后,您需要将此项目添加到您的日志记录器注册表中。这通常在Service_Locator
中的setup
方法中完成。
/** * Set up active loader classes. * * This is where you can add anything that needs "registered" to WordPress, * such as shortcodes, rest endpoints, blocks, and cron jobs. * * All supported loaders come pre-packaged with this plugin, they just need un-commented here * to begin using. * * @since 1.0.0 */ protected function _setup() { plugin_name_replace_me()->logger()->add('background_process', '\Plugin_Name_Replace_Me\Event_Types\Background_Process'); }
就是这样!现在您可以在任何您想要的地方使用后台进程事件类型。
Writer
Event_Type 使用一个名为 Writer
的类来将错误日志写入文件。Underpin 包含一个适用于大多数情况的文件写入系统,但如果你有其他原因想要以不同的方式记录事件,可以通过重写事件类型的 $writer_class
变量来实现。
假设我们希望每次后台进程记录事件时都收到一封电子邮件。Writer 类可以帮助我们实现这个功能。首先,我们指定将要创建的 Writer 的命名空间和类名。
namespace Plugin_Name_Replace_Me\Event_Types; /** * Class Background_Process * Error event type. * * @since 1.0.0 * * @since * @package */ class Background_Process extends Event_Type { /** * Event type * * @since 1.0.0 * * @var string */ public $type = 'background_process'; /** * Writes this to the log. * Set this to true to cause this event to get written to the log. * * @since 1.0.0 * * @var bool */ protected $write_to_log = true; /** * @var inheritDoc */ public $description = 'Logs when background processes run.'; /** * @var inheritDoc */ public $name = "Background Processes"; /** * The class to instantiate when writing to the error log. * * @since 1.0.0 * * @var string Namespaced instance of writer class. */ public $writer_class = 'Plugin_Name_Replace_Me\Factories\Email_Logger'; }
然后,我们在正确的目录下创建类,该目录与我们的命名空间匹配。它应该扩展 Writer
类。
示例
一个非常基础的示例可能如下所示。
underpin()->scripts()->add( 'test', [ 'handle' => 'test', 'src' => 'path/to/script/src', 'name' => 'test', 'description' => 'The description', ] );
或者,您也可以扩展 Event_Type
并直接引用扩展后的类,如下所示
underpin()->logger()->add('key','Namespace\To\Class');