karelwintersky / monolog-pdo-handler
A handler for Monolog that stores data via PDO driver to Database
Installs: 5 994
Dependents: 1
Suggesters: 0
Security: 0
Stars: 9
Watchers: 3
Forks: 5
Open Issues: 2
Requires
- php: >=7.1
- ext-pdo: *
- monolog/monolog: >1.4.0
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
karelwintersky/monolog-pdo-handler
is available via composer.
composer require karelwintersky/monolog-pdo-handler
Minimum PHP version is 7.1
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 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
Examples
Given that $pdo is your database instance, you could use the class as follows:
//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'] ]);
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.