l0rb/monolog-pdo-handler

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

v0.8 2022-05-10 12:50 UTC

This package is not auto-updated.

Last update: 2024-10-02 20:27:42 UTC


README

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

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

安装

monolog.KW-PDO-Handler`` 通过 composer 提供。只需在 composer.json 的需求部分添加以下行,然后执行 php composer.phar update`。

"karelwintersky/monolog-pdo-handler": "^0.1.0"

或者

composer require karelwintersky/monolog-pdo-handler

用法

像使用其他任何 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;

// 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 文件以获取更多信息。