Search by

sugiphp / logger

tzappa

PSR-3 compatible logger

Package info

github.com/SugiPHP/Logger

pkg:composer/sugiphp/logger

Statistics

Installs: 511

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

3.0.0 2026-09-15 07:57 UTC

This package is auto-updated.

Last update: 2026-09-21 08:07:18 UTC


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.