underpin/logger-loader

Underpin的日志加载器

2.1.0 2021-11-22 12:24 UTC

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');

设置

  1. 安装Underpin。请参阅Underpin文档
  2. 根据需要注册新的事件类型。

调试日志记录器

如果您已登录,并在任何URL末尾添加underpin_debug=1,则在管理栏中会出现“Underpin事件”按钮。这提供了一个调试界面,可以输出请求中注册的所有项目以及请求中记录的任何事件。这种上下文在生产环境中特别有用,因为调试可能很困难。

事件日志实用工具

此插件包含一个实用工具,可以使在此插件中记录事件成为可能。这些日志写入到wp_uploads目录中的文件,并附带一个cron作业,可以自动清除旧日志。此外,可以通过创建自定义Writer类来扩展日志记录器保存数据的方法。

使用错误日志记录器

此插件包含3种事件类型 - errorwarningnotice。将error事件写入日志,而warningnotice仅在启用WP_DEBUG时显示在屏幕控制台中。这允许您添加大量noticeswarnings,而不会因大量的文件写入而使系统负担过重。

要写入日志记录器,只需将它们链接到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');