This project is a detached fork of APIx Log as I wanted to add features and bug fixes not available in the original version.
Minimalist and fast PSR-3 compliant logger.
-
Light, come out-of-the-box bundle with wrappers for:
-
Extendable, additional logging backends are available:
- PHPMailer/apix-log-phpmailer ~ logs are sent using PHPMailer,
- jspalink/apix-log-pushover ~ logs are sent using Pushover,
- apix/log-tracker ~ adds logger/tracker such as Google Analytics, Dashbot, etc...,
-
Very fast and even faster when logging is deferred. See here on how it compares to monolog
-
Clean API, see the
LoggerInterface
and theFormatInterface
. -
100% Unit tested and compliant with PSR0, PSR1 and PSR2.
Feel free to comment, send pull requests and patches...
composer require 8ctopus/apix-log
This simple logger is set to intercept all logs and display them in the console.
$console = (new Apix\Log\Logger\Stream('php://stdout'))
->setMinLevel('debug')
->setFormat(new Apix\Log\Format\ConsoleColors())
->notice('Running out of {items}', 'Running out of {items} - left {left}', [
'items' => 'beers',
'left' => 5,
]);
[2023-03-20 08:01:25] NOTICE Running out of beers - left 5
Let's create an additional logger with purpose of catching log entries that have a severity level of warning
or more.
See the log levels for the order.
$file = (new Apix\Log\Logger\File(__DIR__ . '/app.log'))
// intercept logs that are >= `warning`
->setMinLevel('warning')
// propagate to other loggers
->setCascading(true)
// postpone writing logs to file
->setDeferred(true)
// flush logs to file once 100 logs are collected
->setDeferredTrigger(100);
setCascading()
set to true (default: true) so the entries caught here continue downstream past that particular logger.\setDeferred()
was set to true (default: false) so processing happens when:setDeferredTrigger
is reachedflushDeferredLogs
is called__destruct
(end of script generally)
Now, let's create a main logger object and inject the two previous loggers.
$logger = new Apix\Log\Logger([$console, $file]);
Finally, let's push some log entries:
$exception = new \Exception('Boo!');
// handled by all loggers
$logger->critical('OMG saw {bad-exception}', ['bad-exception' => $exception]);
// push an object (or array) directly
$logger->error($exception);
// handled by console logger
$logger->info('Testing a var {my_var}', ['my_var' => [...]]);
The eight RFC 5424 levels of logs are supported, in cascading order:
Severity | Description |
---|---|
Emergency | System level failure (not application level) |
Alert | Failure that requires immediate attention |
Critical | Serious failure at the application level |
Error | Runtime errors, used to log unhandled exceptions |
Warning | May indicate that an error will occur if action is not taken |
Notice | Events that are unusual but not error conditions |
Info | Normal operational messages (no action required) |
Debug | Verbose info useful to developers for debugging purposes (default) |
APIx Log is licensed under the New BSD license -- see the LICENSE.txt
for the full license details.
- compare only log entry vs master branch
- fix demo colors in branch only log entry if faster
- should Logger inherit from AbstractLogger?
- add html formatting for emails
- change context logging
- add log line?