l0rb/monolog-pdo-handler

A handler for Monolog that stores data via PDO driver to Database

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

This package is not auto-updated.

Last update: 2024-05-01 18:19:47 UTC


README

PDO Handler for Monolog, which allows to store log messages in a MySQL Database via PDO handler.

Handler can log text messages to a specific table and creates the table automatically if it does not exist.

Installation

monolog.KW-PDO-Handler`` is available via composer. Just add the following line to your required section in composer.json and do a php composer.phar update`.

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

or do

composer require karelwintersky/monolog-pdo-handler

Usage

Just use it as any other Monolog Handler, push it to the stack of your Monolog Logger instance. The Handler however needs some parameters:

  • $pdo - PDO Instance of your database. Pass along the PDO instantiation of your database connection with your database selected.
  • $table - The table name where the logs should be stored.
  • $additional_fields - associative array of additional database fields definitions. All additional columns are created automatically and the fields can later be used in the extra context section of a record. See examples below. Default is empty array.
  • $additional_indexes - associative array of additional database indexes definitions. Default is empty array
  • $level - The minimum logging level at which this handler will be triggered. Must be any of standard Monolog logging levels (default: Logger::DEBUG)

Default fields at logging table

  • id - defined as BIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY;
  • ipv4 - defined as int(10) unsigned DEFAULT NULL, will contain client IPv4 or 127.0.0.1 for console scripts;
  • time - defined as TIMESTAMP, will contain current timestamp;
  • level - defined as SMALLINT, logging level;
  • channel - defined as VARCHAR(64), channel name,
  • message - defined as LONGTEXT, message

Examples

Given that $pdo is your database instance, you could use the class as follows:

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

Note: SQLite does not support 'USING method' for indexes;

ToDo

[ ] Check and override default field definitions [ ] Update readme : how to write custom indexes [ ] Update readme : about SQLite. [ ] Implement default indexes for PostgreSQL

License

This tool is free software and is distributed under the MIT license. Please have a look at the LICENSE file for further information.