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.
karelwintersky/monolog-pdo-handler
is available via composer.
composer require karelwintersky/monolog-pdo-handler
Minimum PHP version is 7.1
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)
id
- defined asBIGINT(20) NOT NULL AUTO_INCREMENT PRIMARY KEY
;ipv4
- defined asint(10) unsigned DEFAULT NULL
, will contain client IPv4 or 127.0.0.1 for console scripts;time
- defined asTIMESTAMP
, will contain current timestamp;level
- defined asSMALLINT
, logging level;channel
- defined asVARCHAR(64)
, channel name,message
- defined asLONGTEXT
, 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
$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;
- 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.