8ctopus/apix-log

Minimalist, thin and fast PSR-3 compliant (multi-bucket) logger.

3.0.7 2023-12-28 11:40 UTC

README

packagist downloads min php version license tests code coverage badge lines of code

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.

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 reached
    • flushDeferredLogs 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?