8ctopus / apix-log
Minimalist, thin and fast PSR-3 compliant (multi-bucket) logger.
Requires
- php: >=8.1
- psr/log: ^2.0|^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.0|^10.0
Suggests
- PHPMailer/apix-log-phpmailer: Allow sending log messages via PHPMailer
- apix/log-tracker: Allow sending log messages to logger/tracker such as Google Analytics, Dashbot, etc.
- jspalink/apix-log-pushover: Allow sending log messages via Pushover
Provides
- psr/log-implementation: ^1.0
Replaces
- apix/log: 1.2.2
This package is auto-updated.
Last update: 2024-10-26 15:15:15 UTC
README
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...
Installation
composer require 8ctopus/apix-log
Basic usage
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
Advanced usage ~ multi-logs dispatcher
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' => [...]]);
Log levels
The eight RFC 5424 levels of logs are supported, in cascading order:
License
APIx Log is licensed under the New BSD license -- see the LICENSE.txt
for the full license details.
todo
- 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?