PDO Handler for Monolog, based on Monolog example with some additions
Switch branches/tags
Nothing to show
Clone or download
Latest commit af510a8 Sep 2, 2018
Failed to load latest commit information.
src 0.2 Jun 16, 2018
.gitattributes 0.1.12 Jun 16, 2018
.gitignore 0.1.12 Jun 16, 2018
LICENSE Initial commit Dec 7, 2017
README.md Update README.md Sep 2, 2018
composer.json 0.1.4 Jun 15, 2018



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.


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


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

  • ipv4 - defined as int(10) unsigned DEFAULT NULL, will contain client IPv4 or 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


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

// 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;


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


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