bradmkjr / monolog-wordpress

Monolog 的处理器,通过 WordPress 函数将消息发送到 MySQL

2.2.1 2022-02-09 22:31 UTC

This package is auto-updated.

Last update: 2024-09-14 22:39:04 UTC


README

WordPress 的 Monolog 处理器,允许将日志消息存储在 MySQL 表中。它可以记录特定表中的文本消息,并在表不存在时自动创建表。该类还允许动态添加额外的属性,这些属性存储在单独的数据库字段中,可以用于后续分析和排序。

基于以下内容:主页:http://www.d-herrmann.de/projects/monolog-mysql-handler/

免责声明

这是一个非常简单的 Monolog 处理器。这个版本适用于自定义插件开发,但我不建议将此代码公开存储库,用于在流量大的网站上通用。您已经被警告。

安装

monolog-wordpress 通过 composer 提供。只需将以下行添加到 composer.json 中所需部分,然后执行 php composer.phar update 或您选择的 composer 更新方法。

"bradmkjr/monolog-wordpress": "^2.1.0"

版本

由于 Monolog v2 与 v7.1 之前的 PHP 版本不兼容,有些人可能想继续使用 Monolog v1。因此,monolog-wordpress 提供了两个主要版本

  • v1 - 与 Monolog v1 和 PHP v5.3 或更高版本兼容。
  • v2 - 与 Monolog v2 和 PHP v7.1 或更高版本兼容。
  • v3 - 与 Monolog v3 和 PHP v8.1 或更高版本兼容。

除了上述兼容性差异之外,v1 和 v2 的功能将尽可能保持相同。

使用方法

只需将其用作其他任何 Monolog 处理器,将其推送到 Monolog 日志实例的堆栈中。然而,该处理器有一些参数

  • $wpdb: 您的数据库连接实例。要使用 WordPress 的全局连接,请使用 null。否则,使用 \wpdb 实例。默认值:null
  • $table: 存储日志的数据库表名称。将自动添加 'wp_'(或配置的其他前缀)。默认值:'logs'
  • $additionalFields: 简单的数组,包含应存储在数据库中的额外数据库字段。列将自动创建,字段可以稍后在记录的额外上下文部分中使用。请参阅下面的示例。默认为空数组 array()
  • $level: 此处理器将被触发记录的最小日志级别。可以是任何标准的 Monolog 日志级别。使用 Monolog 静态定义的上下文。默认值:Logger::DEBUG
  • $bubble: 处理的消息是否可以向上冒泡到堆栈。 默认值:true

示例

假设全局 $wpdb 是您的数据库实例,您可以使用此类如下

// Import class
use WordPressHandler\WordPressHandler;

// Create WordPressHandler
$wordPressHandler = new WordPressHandler(null, "log", ['username', 'userid'], \Monolog\Logger::DEBUG);

// Configure maximum number of rows to keep (old entries are deleted when reached)
$wordPressHandler->conf_table_size_limiter( 250000 );

// Setup array of extra fields
$record = ['extra' => []];

// Create database table if needed, add extra fields from above
$wordPressHandler->initialize($record);

// Create Logger
$context = 'channel-name';
$logger = new \Monolog\Logger($context);

// Add WordPressHandler as the Handler for the Logger
$logger->pushHandler($wordPressHandler);

// Now you can use the logger, and further attach additional information
$logger->warning("This is a great message, woohoo!", ['username'  => 'John Doe', 'userid'  => 245]);

在插件激活时设置表的必需代码

require __DIR__.'/vendor/autoload.php';

// Create the logs table if it doesn't already exist on plugin activation
register_activation_hook(__FILE__, 'my_plugin_activation');
function my_plugin_activation() {
    $handler = new \WordPressHandler\WordPressHandler(
        null, "logs",
        array('username', 'userid'),
        \Monolog\Logger::DEBUG
    );

    // setup array of extra fields
    $record = array('extra' => array());

    // creates database table if needed, add extra fields from above
    $handler->initialize($record);
}

现在在我的插件中的其他地方,我想要使用记录器

$logger = new \Monolog\Logger('channel');
$handler = new \WordPressHandler\WordPressHandler(
    null, "logs",
    [],
    \Monolog\Logger::DEBUG
);
$handler->initialized = true; // Don't do any extra work - we've already done it.
$logger->pushHandler($handler);

$logger->warning('Some message');

在插件停用时删除表的示例代码

register_uninstall_hook(__FILE__, 'my_plugin_uninstall');
function my_plugin_uninstall()
{
    require __DIR__."/vendor/autoload.php";

    $handler = new \WordPressHandler\WordPressHandler(
        null, "logs",
        [],
        \Monolog\Logger::DEBUG
    );
    $handler->uninitialize();
}

在您自定义的 WordPress 插件中使用示例

use WordPressHandler\WordPressHandler;

require __DIR__ . '/vendor/autoload.php';

add_action( 'plugins_loaded', 'demo_function' );
function demo_function(){
    // Create a WordPressHandler instance
    $wordPressHandler = new WordPressHandler(null, "log", ['app', 'version'], \Monolog\Logger::DEBUG);
    
    // Create logger
    $context = 'test-plugin-logging';
    $logger = new \Monolog\Logger($context);
    
    // Add WordPressHandler as the Handler for the Logger
    $logger->pushHandler($wordPressHandler);
    
    // Now you can use the logger, and further attach additional information
    $logger->warning("This is a great message, woohoo!", ['app'  => 'Test Plugin', 'version'  => '2.4.5']);
}

许可协议

本工具是免费软件,遵循MIT许可证分发。请查阅LICENSE文件获取更多信息。