This is a Trait that allows to have logging capabilities in any class.
By default, it uses Monolog and streams to standard output, but you can override this behaviour.
composer require lfbn/logger-trait
// In the class you want, add the use of the Trait.
use LoggerTrait;
(...)
// After that, you can use it.
$this->logError('Some message...', ['some context']);
// Implement the following protected properties.
/* @var string */
protected static $loggerName = 'my-logger-name';
/* @var string */
protected static $loggerStream = 'php://stdout';
/* @var string */
protected static $loggerMinimumLevel = LogLevel::DEBUG;
class MyClass {
protected function initLogger(): bool
{
$this->logger = new \Monolog\Logger('Overriding default logger: '.$this->getLoggerName());
try {
$handler = new StreamHandler(
$this->getLoggerStream(),
$this->getLoggerMinimumLevel()
);
$this->logger->pushHandler($handler);
} catch (Exception $e) {
$this->logger = new NullLogger();
return false;
}
return true;
}
}
class Test {
use \Lfbn\LoggerTrait\LoggerTrait;
public function test(): void
{
$this->logDebug('Hello TEST!');
}
}
$logger = new \Monolog\Logger('test4-my-own-logger');
try {
$handler = new StreamHandler(
'php://stdout',
'debug'
);
$logger->pushHandler($handler);
} catch (Exception $e) {
$logger = new NullLogger();
}
$myClass = (new Test());
$myClass->setLogger($logger);
$myClass->test();
$this->logWarning(
self::interpolateMessage(
'Hello my {private} TEST5!',
['private' => 'message']
),
);