2017 © Pedro Peláez
 

library dot-log

DotKernel log component extending and customizing zend-log

image

dotkernel/dot-log

DotKernel log component extending and customizing zend-log

  • Wednesday, May 30, 2018
  • by dotkernel
  • Repository
  • 2 Watchers
  • 1 Stars
  • 532 Installations
  • PHP
  • 2 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 6 Versions
  • 10 % Grown

The README.md

dot-log

OSS Lifecycle PHP from Packagist (specify version), (*1)

GitHub issues GitHub forks GitHub stars GitHub license, (*2)

Build Static codecov, (*3)

SymfonyInsight, (*4)

Adding The Config Provider

  • Enter config/config.php
  • If there is no entry for the config provider below, add it: \Dot\Log\ConfigProvider::class
  • Make sure it is added before with the Application-Specific components, eg.: \Frontend\App\ConfigProvider.php, \Admin\App\ConfigProvider::class, MyProject\ConfigProvider::class , etc.
  • Open the Dot\Log\ConfigProvider
  • In the dependencies section you will see an abstract factory (LoggerAbstractServiceFactory::class)
  • This class responds to "selectors" instead of class names Instead of requesting the Dot\Log\Logger::class from the container, dot-log.my_logger should be requested

Configuring the writer(s)

Loggers must have at least one writer., (*5)

A writer is an object that inherits from Dot\Log\Writer\AbstractWriter. A writer's responsibility is to record log data to a storage backend., (*6)

Writing to a file (stream)

It is possible separate logs into multiple files using writers and filters. For example warnings.log, errors.log, all_messages.log., (*7)

The following is the simplest example to write all log messages to /log/dk.log, (*8)

return [
    'dot_log' => [
        'loggers' => [
            'my_logger' => [
                'writers' => [
                     'FileWriter' => [
                        'name' => 'FileWriter',
                        'priority' => \Dot\Log\Manager\Logger::ALERT, // this is equal to 1
                        'options' => [
                            'stream' => __DIR__ . '/../../log/dk.log',
                        ],
                    ],
                ],
            ]
        ],
    ],
];
  • The FileWriter key is optional, otherwise the writers array would be enumerative instead of associative.
  • The writer name key is a developer-provided name for that writer, the writer name key is mandatory.

The writer priority key is not affecting the errors that are written, it is a way to organize writers., (*9)

The writer priority key is optional., (*10)

To write into a file the key stream must be present in the writer options array. This is required only if writing into streams/files., (*11)

Grouping log files by date

By default, logs will be written to the same file: log/dk.log. Optionally, you can use date format specifiers wrapped between curly braces in your FileWriter's stream option, automatically grouping your logs by day, week, month, year etc. Examples:, (*12)

  • log/dk-{Y}-{m}-{d}.log will write every day to a different file (eg: log/dk-2021-01-01.log)
  • log/dk-{Y}-{W}.log will write every week to a different file (eg: log/dk-2021-10.log)

The full list of format specifiers is available here., (*13)

Filtering log messages

As per PSR-3 document., (*14)

The log levels are: emergency (0), alert (1), critical (2), error (3), warn (4), notice (5), info (6), debug (7) (in order of priority/importance), (*15)

Although the plain Logger in Dot Log is not fully compatible with PSR-3, it provides a way to log all of these message types., (*16)

The following example has three file writers using filters:, (*17)

  • First Example: FileWriter - All messages are logged in /log/dk.log
  • Second Example: OnlyWarningsWriter - Only warnings are logged in /log/warnings.log
  • Third Example: WarningOrHigherWriter - All important messages (warnings or more critical) are logged in /log/important_messages.log
<?php

return [
    'dot_log' => [
        'loggers' => [
            'my_logger' => [
                'writers' => [
                    'FileWriter' => [
                        'name' => 'FileWriter',
                        'priority' => \Dot\Log\Manager\Logger::ALERT,
                        'options' => [
                            'stream' => __DIR__ . '/../../log/dk.log',
                            'filters' => [
                                'allMessages' => [
                                    'name' => 'priority',
                                    'options' => [
                                        'operator' => '>=', 
                                        'priority' => \Dot\Log\Manager\Logger::EMERG,
                                    ]
                                ],
                            ],
                        ],
                    ],
                    // Only warnings
                    'OnlyWarningsWriter' => [
                        'name' => 'stream',
                        'priority' => \Dot\Log\Manager\Logger::ALERT,
                        'options' => [
                            'stream' => __DIR__ . '/../../log/warnings_only.log',
                            'filters' => [
                                'warningOnly' => [
                                    'name' => 'priority',
                                    'options' => [
                                        'operator' => '==',
                                        'priority' => \Dot\Log\Manager\Logger::WARN,
                                    ],
                                ],
                            ],
                        ],
                    ],
                    // Warnings and more important messages
                    'WarningOrHigherWriter' => [
                        'name' => 'stream',
                        'priority' => \Dot\Log\Manager\Logger::ALERT,
                        'options' => [
                            'stream' => __DIR__ . '/../../log/important_messages.log',
                            'filters' => [
                                'importantMessages' => [
                                    'name' => 'priority',
                                    'options' => [
                                        // note, the smaller the priority, the more important is the message
                                        // 0 - emergency, 1 - alert, 2- error, 3 - warn. .etc
                                        'operator' => '<=',
                                        'priority' => \Dot\Log\Manager\Logger::WARN,
                                    ],
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

As in the writer configuration, the developer can optionally use keys for associating the filters with a name., (*18)

IMPORTANT NOTE: the operator for more important messages is <=, this is because the number representation is smaller for a more important message type., (*19)

The filter added on the first writer is equal to not setting a filter, but it was been added to illustrate how to explicitly allow all messages., (*20)

It was added opposite to the others just to demonstrate the other operator is also an option., (*21)

Formatting Messages

When using dot-log, the logged value is not limited to a string. Arrays can be logged as well., (*22)

For a better readability, these arrays can be serialized., (*23)

Dot Log provides String formatting and JSON formatting., (*24)

The formatter accepts following parameters:, (*25)

name - the formatter class (it must implement Dot\Log\Formatter\FormatterInterface) options - options to pass to the formatter constructor if required, (*26)

The following formats the message as JSON data:, (*27)

'formatter' => [
    'name' => \Dot\Log\Manager\Formatter\Json::class,
],

Example with formatter

  • The log is used through dot-log
  • The logger name is my_logger
  • Writes to file: log/dk.log
  • Explicitly allows all the messages to be written
  • Formats the messages as JSON
<?php


return [
    'dot_log' => [
        'loggers' => [
            'my_logger' => [
                'writers' => [
                    'FileWriter' => [
                        'name' => 'FileWriter',
                        'priority' => \Dot\Log\Manager\Logger::ALERT,
                        'options' => [
                            'stream' => __DIR__ . '/../../log/dk.log',
                            // explicitly log all messages
                            'filters' => [
                                'allMessages' => [
                                    'name' => 'priority',
                                    'options' => [
                                        'operator' => '>=',
                                        'priority' => \Dot\Log\Manager\Logger::EMERG,
                                    ],
                                ],
                            ],
                            'formatter' => [
                                'name' => \Dot\Log\Manager\Formatter\Json::class,
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],
];

Usage

Basic usage of the logger is illustrated below., (*28)

The messages are written to see which logs are written and which are not written., (*29)

use Dot\Log\Manager\Logger;

..., (*30)

$logger = $container->get('dot-log.my_logger');

/** @var Logger $logger */
$logger->emerg('0 EMERG');
$logger->alert('1 ALERT');
$logger->crit('2 CRITICAL');
$logger->err('3 ERR');
$logger->warn('4 WARN');
$logger->notice('5 NOTICE');
$logger->info('6 INF');
$logger->debug('7 debug');
$logger->log(Logger::NOTICE, 'NOTICE from log()');

Extracted from this article, (*31)

The Versions

30/05 2018

dev-master

9999999-dev

DotKernel log component extending and customizing zend-log

  Sources   Download

MIT

The Requires

 

The Development Requires

by n3vrax
by DotKernel Team

30/05 2018

dev-develop

dev-develop

DotKernel log component extending and customizing zend-log

  Sources   Download

MIT

The Requires

 

The Development Requires

by n3vrax
by DotKernel Team

30/05 2018

v1.1.1

1.1.1.0

DotKernel log component extending and customizing zend-log

  Sources   Download

MIT

The Requires

 

The Development Requires

by DotKernel Team

15/03 2017

1.1.0

1.1.0.0

DotKernel log component extending and customizing zend-log

  Sources   Download

MIT

The Requires

 

The Development Requires

by n3vrax