l0rb / monolog-pdo-handler
A handler for Monolog that stores data via PDO driver to Database
Requires
- php: >=5.3.0
- ext-pdo_mysql: *
- monolog/monolog: >1.4.0
- symfony/var-dumper: ^5.4
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 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; // 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.