-
Notifications
You must be signed in to change notification settings - Fork 0
05 Logging
Leo edited this page Oct 16, 2025
·
2 revisions
composer require monolog/monolog
<?php
echo "Let's do some logging!";
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
require '../vendor/autoload.php';
// Create a logger instance
$log = new Logger('app');
// Add a handler (write logs to app.log)
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::DEBUG));
// Log messages
$log->info('User logged in', ['username' => 'johnny']);
$log->warning('Low disk space');
$log->error('Could not connect to database');
?>- Go into directory of the PHP file doing the logging
- Open "app.log" file
| Constant | Level Name | Numeric Value | Meaning |
|---|---|---|---|
| Logger::DEBUG | Debug | 100 | Detailed debug info |
| Logger::INFO | Info | 200 | General info |
| Logger::NOTICE | Notice | 250 | Normal but significant |
| Logger::WARNING | Warning | 300 | Something unexpected |
| Logger::ERROR | Error | 400 | Runtime error |
| Logger::CRITICAL | Critical | 500 | Serious issue |
| Logger::ALERT | Alert | 550 | Requires immediate action |
| Logger::EMERGENCY | Emergency | 600 | System unusable |
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::DEBUG));The parameter Logger::DEBUG defines the minimum logging level.
DEBUG means "log everything".
$level = ($_ENV['APP_ENV'] ?? 'prod') === 'dev' ? Logger::DEBUG : Logger::WARNING;
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', $level));For DEV:
APP_ENV=dev
LOG_PATH=app.log
For PROD:
APP_ENV=prod
LOG_PATH=/var/log/myapp/app.log
composer require monolog/monolog vlucas/phpdotenv
or just (if you already have monolog installed):
composer require vlucas/phpdotenv
See more https://github.com/vlucas/phpdotenv
<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Dotenv\Dotenv;
// Load environment variables
$dotenv = Dotenv::createImmutable(__DIR__);
$dotenv->load();
// Read environment variables (with defaults)
$appEnv = $_ENV['APP_ENV'] ?? 'prod';
$logPath = $_ENV['LOG_PATH'] ?? __DIR__ . '/app.log';
// Choose log level based on environment
$logLevel = ($appEnv === 'dev') ? Logger::DEBUG : Logger::WARNING;
// Create logger
$log = new Logger('myapp');
$log->pushHandler(new StreamHandler($logPath, $logLevel));
// Test logging
$log->debug('Debug: development details');
$log->info('Info: something happened');
$log->warning('Warning: potential issue');
$log->error('Error: something failed');
// Output for testing
echo "App environment: $appEnv\n";
echo "Logging to: $logPath\n";
echo "Minimum log level: " . Logger::getLevelName($logLevel) . "\n";This solution only differentiates between two logging options:
- dev = all
- prod = WARNING and upwards