Install via Composer:
composer require monolog/monolog
For Laravel integration, ensure compatibility with Laravel 7/8 and PHP 7.3+. Register the package in config/logging.php under the channels array (e.g., single, slack, or sentry). Example for Slack:
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':rocket:',
],
First use case: Replace Log::error() with Monolog’s Logger instance for granular log handling:
$logger = app('log')->driver('slack');
$logger->error('Critical failure', ['trace' => $e]);
slack for alerts, single for files):
Log::channel('slack')->warning('Deploy started', ['user' => auth()->user()]);
Log::info('User action', ['user_id' => 123, 'action' => 'profile_update']);
Processor to enrich logs (e.g., add request IDs):
$processor = new \Monolog\Processor\UidProcessor();
$logger->pushProcessor($processor);
Log::build() to create ad-hoc loggers:
$logger = Log::build([
'driver' => 'custom',
'path' => storage_path('logs/custom.log'),
]);
async channel) for performance:
'async' => [
'driver' => 'async',
'queue' => 'logs',
],
Deprecated Handlers Removed:
Monolog\Handler\RavenHandler with Sentry\Monolog\Handler (v3.x).
// Old (deprecated)
$handler = new \Monolog\Handler\RavenHandler($client);
// New
$handler = new \Sentry\Monolog\Handler($client);
SlackWebhookHandler or SlackHandler.
$handler = new \Monolog\Handler\SlackWebhookHandler($webhookUrl, $username);
Laravel/PHP Version Drop:
StreamHandler before SlackHandler to avoid duplicate logs).Monolog\Handler\RotatingFileHandler for file-based logs:
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => 'debug',
'maxFiles' => 5, // Rotate after 5 files
],
Monolog\Handler\AbstractProcessingHandler for bespoke integrations (e.g., Datadog, PagerDuty).DEBUG, INFO, WARNING, etc.) instead of Laravel’s Log::debug() for consistency:
$logger->debug('Debug message', ['context' => 'value']);
$logger->pushHandler(new \Monolog\Handler\StreamHandler(storage_path('logs/app.log')));
$logger->pushHandler(new \Monolog\Handler\SlackWebhookHandler($webhookUrl));
How can I help you explore Laravel packages today?