bradmkjr / monolog-wordpress
Monolog 的处理器,通过 WordPress 函数将消息发送到 MySQL
2.2.1
2022-02-09 22:31 UTC
Requires
- php: >=7.1.0
- monolog/monolog: ^2.0.0
Requires (Dev)
- phpunit/phpunit: 5.0.*
- wordpress/wordpress: 4 - 5
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文件获取更多信息。