karelwintersky/monolog-pdo-handler

Monolog 的处理器,通过 PDO 驱动将数据存储到数据库

0.6 2023-08-06 17:33 UTC

This package is auto-updated.

Last update: 2024-09-19 10:47:30 UTC


README

Monolog 的 PDO 处理器,允许通过 PDO 处理器将日志消息存储在 MySQL 数据库中。

处理器可以将文本消息记录到指定的表中,如果表不存在,则会自动创建。

安装

karelwintersky/monolog-pdo-handler 通过 composer 提供。

composer require karelwintersky/monolog-pdo-handler

最低 PHP 版本为 7.1

使用方法

就像使用其他 Monolog 处理器一样使用它,将其推送到 Monolog 日志实例的堆栈中。但是,该处理器需要一些参数

  • $pdo - 数据库的 PDO 实例。传递数据库连接的 PDO 实例化,并选择数据库。
  • $table - 存储日志的表名。
  • $additional_fields - 额外数据库字段定义的关联数组。所有额外的列都会自动创建,并且可以在记录的额外上下文部分中使用这些字段。默认为空数组。
  • $additional_indexes - 额外数据库索引定义的关联数组。默认为空数组
  • $level - 此处理器将触发记录的最小日志级别。必须是标准的 Monolog 日志级别之一(默认:Logger::DEBUG)

日志表中默认字段

  • id - 定义为 BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY;
  • ipv4 - 定义为 int(10) unsigned DEFAULT NULL,将包含客户端 IPv4 或控制台脚本的 127.0.0.1;
  • time - 定义为 TIMESTAMP,将包含当前时间戳;
  • level - 定义为 SMALLINT,日志级别;
  • channel - 定义为 VARCHAR(64),通道名称;
  • message - 定义为 LONGTEXT,消息;

示例

假设 $pdo 是您的数据库实例,您可以使用该类如下所示

//Import class
use Monolog\Logger;
use KarelWintersky\Monolog\KWPDOHandler;

// Create log handler
// using table `log` with additional fields
// `filename`, `filesize`, `filetime`
// and index at field `filename`
// minimum logging level is INFO.

$log_handler = new KWPDOHandler($pdo_handler, 'log', [
    'filename'  =>  'VARCHAR(32)',
    'filesize'  =>  'BIGINT(20) DEFAULT NULL',
    'filetime'  =>  'DATETIME'
], [
    'filename'  =>  'CREATE INDEX filename on `%s` (`filename`) USING HASH',
], Logger::INFO);

// Create logger
$monologger = new \Monolog\Logger($monolog_channel);

// Set handler
$monologger->pushHandler($log_handler);

// Now you can use the logger, and further attach additional information
$monologger->notice("File information", [
    'filename'  =>  $data['filename'],
    'filesize'  =>  $data['filesize'],
    'filetime'  =>  $data['filetime']
]);

注意:SQLite 不支持 'USING method' 用于索引;

待办事项

  • 检查并覆盖默认字段定义
  • 更新README:如何编写自定义索引
  • 更新README:关于 SQLite。
  • 实现 PostgreSQL 的默认索引

许可证

此工具是免费软件,并且根据 MIT 许可证分发。请查看 LICENSE 文件以获取更多信息。