jardisadapter / logger
PSR-3 logging pipeline with 20+ handlers, 7 formatters, 6 enrichers, and fluent builder API
Requires
- php: >=8.2
- ext-json: *
- ext-pdo: *
- jardissupport/dotenv: ^1.0
- psr/container: ^2.0
- psr/log: ^3.0
Requires (Dev)
- ext-amqp: *
- ext-rdkafka: *
- ext-redis: *
- phpstan/phpstan: ^2.0.4
- phpunit/phpunit: ^10.5
- squizlabs/php_codesniffer: ^3.11.2
This package is auto-updated.
Last update: 2026-03-31 08:24:15 UTC
README
Part of the Jardis Business Platform — Enterprise-grade PHP components for Domain-Driven Design
PSR-3 logging pipeline with 20+ handlers, 7 formatters, and 6 enrichers. Configure everything through a fluent LoggerBuilder — the resulting Logger is immutable after construction. Smart handlers for production: LogFingersCrossed buffers until an error occurs, LogSampling reduces noise at high volume, LogConditional routes by content. One LoggerBuilder context per bounded context keeps logs cleanly separated.
Features
- 20+ Handlers — File, Console, Slack, Teams, Redis, Kafka, RabbitMQ, Loki, Database, Email, Webhook, Syslog, and more
- Smart Handlers —
LogFingersCrossed(buffer-on-error),LogSampling(volume reduction),LogConditional(rule-based routing) - Fluent Builder —
LoggerBuilderchains handler registration;getLogger()returns an immutableLogger - Auto-Enrichment —
LogDateTime,LogUuid,LogMemoryUsage,LogMemoryPeak,LogClientIp,LogWebRequestadded per handler - 7 Formatters —
LogJsonFormat,LogLineFormat,LogHumanFormat,LogSlackFormat,LogTeamsFormat,LogLokiFormat,LogBrowserConsoleFormat - Named Handlers — Retrieve any handler at runtime via
$logger->getHandler('name') - Error Resilience — One failing handler never stops the others; optional error callback via
setErrorHandler() - Context Separation — Each
LoggerBuilderinstance scopes its handlers to a named bounded context
Installation
composer require jardisadapter/logger
Quick Start
use JardisAdapter\Logger\LoggerBuilder; use Psr\Log\LogLevel; // Console + file in two lines $logger = (new LoggerBuilder('OrderService')) ->addConsole(LogLevel::DEBUG) ->addFile(LogLevel::INFO, '/var/log/orders.log') ->getLogger(); $logger->info('Order created', ['order_id' => 4711]); $logger->error('Payment failed', ['order_id' => 4711, 'reason' => 'Card declined']);
Advanced Usage
use JardisAdapter\Logger\LoggerBuilder; use JardisAdapter\Logger\Handler\LogFile; use Psr\Log\LogLevel; // Production setup: file baseline + Slack alerts + FingersCrossed buffer + Sampling $fileHandler = new LogFile(LogLevel::DEBUG, '/var/log/app.log'); $logger = (new LoggerBuilder('PaymentService')) // Always write DEBUG and above to file ->addHandler($fileHandler) // Alert on Slack for CRITICAL and above ->addSlack( logLevel: LogLevel::CRITICAL, webhookUrl: 'https://hooks.slack.com/services/...', name: 'slack-alerts' ) // Buffer all messages; flush everything to file only when ERROR is triggered ->addFingersCrossed( wrappedHandler: $fileHandler, activationLevel: LogLevel::ERROR, bufferSize: 200, name: 'fingers-crossed' ) // Reduce INFO noise to 10 % under load ->addSampling( wrappedHandler: $fileHandler, strategy: 'rate', config: ['rate' => 10], name: 'sampler' ) ->getLogger(); $logger->info('Checkout started', ['session' => 'abc123']); $logger->error('Stripe timeout', ['attempt' => 3]); // Retrieve a named handler at runtime $slackHandler = $logger->getHandler('slack-alerts');
Documentation
Full documentation, guides, and API reference:
License
This package is licensed under the PolyForm Shield License 1.0.0. Free for all use except building competing frameworks or developer tooling.