gupalo / monolog-dbal-logger
Monolog Handler for DBAL
Installs: 10 322
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 2
Forks: 0
Open Issues: 0
Requires
- php: >=8.1
- ext-json: *
- ext-mbstring: *
- doctrine/dbal: ^3.8|^4.0
- monolog/monolog: ^3.5
- symfony/console: ^5.4|^6.0|^7.0
- symfony/event-dispatcher: ^5.4|^6.0|^7.0
- symfony/http-kernel: ^5.4|^6.0|^7.0
Requires (Dev)
- doctrine/orm: ^3.3
- easycorp/easyadmin-bundle: ^4.18
- gupalo/symfony-form-transformers: ^1.3
- phpunit/phpunit: ^10.5
README
Installation
Add to your project via composer:
composer require gupalo/monolog-dbal-logger
Create log table.
CREATE TABLE `_log` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL,
`level` smallint NOT NULL DEFAULT 0,
`level_name` enum('debug','info','notice','warning','error','critical','alert','emergency') NULL DEFAULT NULL,
`channel` varchar(255) NOT NULL DEFAULT '',
`message` varchar(1024) NOT NULL DEFAULT '',
`context` text NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `log_created_at_level` (`created_at`, `level`) USING BTREE
) DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci;
Example
$connection
is Doctrine\DBAL\Connection
$handler = new \Gupalo\MonologDbalLogger\MonologDbalLogger($connection);
$logger = new \Monolog\Logger();
$logger->pushHandler($handler);
$logger->addWarning('You might not read the docs', ['page' => 17, 'username' => 'guest']);
Symfony
Configuration example:
services.yaml
Gupalo\MonologDbalLogger\Symfony\ErrorLogListener:
tags: [ {name: 'kernel.event_subscriber'} ]
monolog.dbal_handler:
class: 'Gupalo\MonologDbalLogger\MonologDbalLogger'
public: true
bind:
$connection: '@doctrine.dbal.default_connection'
$level: 200
tags: ['monolog.logger']
monolog.yaml
monolog:
handlers:
db:
type: service
id: 'monolog.dbal_handler' # note - no "@"
channels: ["!event", "!request", "!security"]
Configure
Params in MonologDbalLogger::__construct
:
string $table = '_log'
: table nameint $maxRows = 100000
: if you have more rows than$maxRows
then cleaner will eventually (1 in 1000 chances) remove them
Extend
You may extend MonologDbalLogger
and add your own logic. See MyMonologDbalLogger
as an example.
If you add additional fields, remember to change table creation SQL.
Table:
CREATE TABLE `_log` (
`id` bigint UNSIGNED NOT NULL AUTO_INCREMENT,
`created_at` datetime NOT NULL,
`level` smallint NOT NULL DEFAULT 0,
`level_name` enum('debug','info','notice','warning','error','critical','alert','emergency') NULL DEFAULT NULL,
`channel` varchar(255) NOT NULL DEFAULT '',
`message` varchar(1024) NOT NULL DEFAULT '',
`context` text NULL DEFAULT NULL,
`method` varchar(255) NULL DEFAULT NULL,
`cmd` varchar(255) NULL DEFAULT NULL,
`uid` varchar(32) NULL DEFAULT NULL,
`count` int NULL DEFAULT NULL,
`time` float NULL DEFAULT NULL,
`exception_class` varchar(1024) NULL DEFAULT NULL,
`exception_message` varchar(1024) NULL DEFAULT NULL,
`exception_line` varchar(1024) NULL DEFAULT NULL,
`exception_trace` text NULL,
PRIMARY KEY (`id`),
INDEX `log_created_at_level` (`created_at`, `level`) USING BTREE
) DEFAULT CHARACTER SET=utf8mb4 COLLATE=utf8mb4_general_ci;
EasyAdmin
Add to menu
yield MenuItem::linkToCrud('Log', 'fa-solid fa-file-waveform', Log::class);
Add to config/packages/doctrine.yaml
doctrine:
orm:
mappings:
# ...here is "App", add below
Gupalo:
is_bundle: false
dir: '%kernel.project_dir%/vendor/gupalo/monolog-dbal-logger/src/Entity'
prefix: 'Gupalo\MonologDbalLogger\Entity'
alias: Gupalo
Create controller. Override if needed
use MarcinJozwikowski\EasyAdminPrettyUrls\Attribute\PrettyRoutesController;
#[PrettyRoutesController(path: 'log')]
class LogCrudController extends \Gupalo\MonologDbalLogger\EasyAdmin\Controller\LogCrudController
{
}
Add to config/services.yaml
services:
Gupalo\MonologDbalLogger\Repository\LogRepository:
tags: [ 'doctrine.repository_service' ]
Other
See tests
.