This package allows you to create and configure Monolog Loggers (opens new window) in centralised and reusable way:
- Configure channels using PHP
- Control Handlers and Processors order
- Integration with popular frameworks (e.g. Laravel, Symfony)
- Discover Handlers and Processors automatically in your application
# Require package (Composer)
The recommended way to install this package is to use Composer (opens new window):
$ composer require eonx-com/easy-logging
# Usage
Here is a simple example on how to use the LoggerFactoryInterface
to create loggers:
// Instantiate the logger factory manually or use DI ...
$default = $loggerFactory->create(); // Calling create without arguments will create logger for default channel
$console = $loggerFactory->create('console'); // Create logger for console channel specifically
# Usage in Framework
The different bridge provided by this package will by default register the logger for your default channel in the service container under the following service ids:
Psr\Log\LoggerInterface
logger
You can then use dependency injection anywhere you like!
Thanks to Autowiring via setters (opens new window) in Symfony, you can use \EonX\EasyLogging\Bridge\Symfony\Traits\LoggerAwareTrait
to simplify the injection of Psr\Log\LoggerInterface
.
# Logger Configuration
The LoggerFactoryInterface
allows you to set different collections of "config providers", each config can define:
- channels: if defined the config will be applied only to given channels, if
null
the config will be applied to all channels - priority: define the order each config must be set on the logger instance, higher the priority later the config will be added to the logger instance
# HandlerConfig
The HandlerConfigInterface
allows you to configure \Monolog\Handler\HandlerInterface
to be set loggers created by
the factory. Like other configs, it allows you to specify a list of channels this handler is for and, also a priority
to control when the handler must be executed.
To tell the logger factory about your HandlerConfigInterface
, you must use a HandlerConfigProviderInterface
. The
logger factory accepts a collection of providers via the setHandlerConfigProviders()
method:
use EonX\EasyLogging\LoggerFactory;
$handlerConfigProviders = [];
// Add your own handler config providers to $handlerConfigProviders ...
$loggerFactory = new LoggerFactory();
// Set your handler config providers on the logger factory
$loggerFactory->setHandlerConfigProviders($handlerConfigProviders);
Here is a simple example of a HandlerConfigProviderInterface
to register a StreamHandler
:
namespace App\Logger;
use EonX\EasyLogging\Config\HandlerConfig;
use EonX\EasyLogging\Interfaces\Config\HandlerConfigProviderInterface;
use Monolog\Handler\StreamHandler;
final class StreamHandlerConfigProvider implements HandlerConfigProviderInterface
{
/**
* @return iterable<\EonX\EasyLogging\Interfaces\Config\HandlerConfigInterface>
*/
public function handlers(): iterable
{
/**
* This method returns an iterable to make it easier to handle complex handler configs definition
* But you can simply return an array if you want.
*/
yield new HandlerConfig(new StreamHandler('php://stdout'));
}
}
# ProcessorConfig
The ProcessorConfigInterface
allows you to configure \Monolog\Processor\ProcessorInterface
to be set loggers created
by the factory. Like other configs, it allows you to specify a list of channels this handler is for and, also a priority
to control when the handler must be executed.
To tell the logger factory about your ProcessorConfigInterface
, you must use a ProcessorConfigProviderInterface
. The
logger factory accepts a collection of providers via the setProcessorConfigProviders()
method:
use EonX\EasyLogging\LoggerFactory;
$processorConfigProviders = [];
// Add your own processor config providers to $handlerConfigProviders ...
$loggerFactory = new LoggerFactory();
// Set your processor config providers on the logger factory
$loggerFactory->setProcessorConfigProviders($processorConfigProviders);
Here is a simple example of a ProcessorConfigProviderInterface
to register a TagProcessor
:
namespace App\Logger;
use EonX\EasyLogging\Config\ProcessorConfig;
use EonX\EasyLogging\Interfaces\Config\ProcessorConfigProviderInterface;
use Monolog\Processor\TagProcessor;
final class TagProcessorConfigProvider implements ProcessorConfigProviderInterface
{
/**
* @return iterable<\EonX\EasyLogging\Interfaces\Config\ProcessorConfigInterface>
*/
public function processors(): iterable
{
/**
* This method returns an iterable to make it easier to handle complex processor configs definition
* But you can simply return an array if you want.
*/
yield new ProcessorConfig(new TagProcessor(['tag-1', 'tag-2']));
}
}
# LoggerConfigurator
The \Monolog\Logger
class has methods allowing you to configure it even more (e.g. using microseconds). To deal with
that, the logger factory accepts a collection of LoggerConfiguratorInterface
.
To tell the logger factory about your LoggerConfiguratorInterface
, you must call the setLoggerConfigurators()
method:
use EonX\EasyLogging\LoggerFactory;
$loggerConfigurators = [];
// Add your own logger configurators to $loggerConfigurators ...
$loggerFactory = new LoggerFactory();
// Set your logger configurators on the logger factory
$loggerFactory->setLoggerConfigurators($loggerConfigurators);
Here is a simple example of a LoggerConfiguratorInterface
to use microseconds:
namespace App\Logger;
use EonX\EasyLogging\Config\AbstractLoggingConfig;
use EonX\EasyLogging\Interfaces\Config\LoggerConfiguratorInterface;
use Monolog\Logger;
final class UseMicrosecondsLoggerConfigurator extends AbstractLoggingConfig implements LoggerConfiguratorInterface
{
public function configure(Logger $logger) : void
{
$logger->useMicrosecondTimestamps(true);
}
}
← Laravel/Lumen Symfony →