sugiphp / logger
PSR-3 compatible logger
Requires
- php: >=8.3
- psr/log: ^3.0
Requires (Dev)
- phpunit/phpunit: ^13.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Version 3.0
PSR-3 logging utilities: file and stdout loggers, and a trait for optional delegated logging.
Components
| Class | Description |
|---|---|
FileLogger |
Writes formatted lines to a file, or to PHP error_log() when no filename is set |
StdoutLogger |
Writes formatted lines to standard output |
LoggerTrait |
Adds setLogger() and PSR-3 level methods; logs only when a logger is attached |
For a no-op logger (useful in tests), use Psr\Log\NullLogger from the psr/log package this library already depends on.
All loggers implement Psr\Log\LoggerInterface.
Usage
File logger
use SugiPHP\Logger\FileLogger; $logger = new FileLogger([ 'filename' => '/var/log/app.log', 'level' => 'info', 'format' => '[{datetime}] [{level}] {message} {context}', 'dateFormat' => 'Y-m-d H:i:s', ]); $logger->info('User logged in', ['userId' => 42]); $logger->error('Payment failed for order {orderId}', ['orderId' => 99]);
If filename is empty, messages go to PHP error_log(). If the file cannot be opened or written, the logger falls back to error_log().
Stdout logger
use SugiPHP\Logger\StdoutLogger; $logger = new StdoutLogger([ 'level' => 'debug', 'format' => '[{level}] {message} {context}', ]); $logger->warning('Disk space low');
Null logger
use Psr\Log\NullLogger; $logger = new NullLogger(); // accepts calls, writes nothing
Logger trait
Use in a class that should log when a LoggerInterface is injected:
use SugiPHP\Logger\LoggerTrait; use Psr\Log\LoggerInterface; class MyService { use LoggerTrait; public function run(): void { $this->info('Starting job'); } } $service = new MyService(); $service->setLogger($logger); $service->run();
Without setLogger(), trait methods are silent.
Configuration
Both FileLogger and StdoutLogger accept an optional config array:
| Key | Default | Description |
|---|---|---|
filename |
'' |
Log file path (FileLogger only); empty uses error_log() |
format |
see class | Line template (placeholders below) |
level |
debug |
Minimum level to record |
dateFormat |
Y-m-d H:i:s |
Used for {datetime} (FileLogger only) |
interpolatePlaceholders |
true |
Replace {key} in messages from context |
removeInterpolatedContext |
true |
Omit used keys from {context} JSON |
Format placeholders
FileLogger:{datetime},{level},{LEVEL},{message},{context}StdoutLogger:{level},{LEVEL},{message},{context}
Levels follow PSR-3: debug, info, notice, warning, error, critical, alert, emergency.