Я обычно использую Monolog для своих PHP журналирования и отладки, но обнаружил, что каждый из моих классов в итоге создает собственный Monolog \ Logger, что хорошо для проекта с одним или двумя классами в нем, но Я хочу поделиться этими классами между несколькими проектами, используя Composer et c. Чтобы каждый класс не использовал свой собственный регистратор, я в настоящее время использую следующий код, который просто позволяет мне передать экземпляр Logger, если он настроен, а если нет, то класс сам устанавливает регистратор Null:
/**
* Basic Constructor
*
* @param Logger|Null Logging instance or Null to do no logging at all
*/
public function __construct($logger = null)
{
if ($logger !== null) {
$this->logger = $logger;
} else {
$this->logger = new Logger('dummy');
$this->logger->pushHandler(new NullHandler());
}
}
private function test($var1,$var2) {
$this->logger->debug('test method called with '.$var1.' and '.$var2);
}
Это лучший способ настроить отладку для моих классов или есть что-то более универсальное / просто более совершенная практика кодирования?
В прошлом я также использовал метод внутри своих классов, который проверяет, $ this -> debug не является нулевым, и если это так, то вызывает Logger с данными, а не отправляет все в нулевой Logger, но для этого требуется несколько методов для каждого уровня журнала:
/**
* If debug enabled, send all passed parameters to debugger
*/
public function debug()
{
if (is_null($this->debug)) {
return;
}
$args = func_get_args();
$this->debug->debug(print_r($args, true));
}
Я не использую никаких предварительных встроенные фреймворки, но я думаю, что та же проблема все еще будет возникать при использовании моих собственных классов с фреймворком.