Я новичок в фреймворке Lumen, и в проекте, в котором я сейчас работаю, я должен использовать расширенный регистратор для регистрации сообщений.
В файле config/logging.php
я определил следующий пользовательский канал.
'channels' => [
'mychannel' => [
'driver' => 'custom'
'via' => \MyApp\Globals\MyLogger\MyLoggerFactory::class
]
]
Затем в классе MyLoggerFactory
я сделал следующее.
class MyLoggerFactory {
public function __invoke($config) {
$logger = new MyLogger('lumen');
$maxFiles = env('APP_MAX_LOG_FILE', 0);
$filename = storage_path('logs/lumen.log');
$handler = new RotatingFileHandler($filename, $maxFiles);
$handler->setFilenameFormat('{date}-{filename}', 'Y-m-d');
$formatter = new MyLineFormatter(null, "Y/m/d H:i:s.u", true, true);
$handler->setFormatter($formatter);
$logger->pushHandler($handler);
return $logger;
}
}
Вот пользовательский логгер, который я построил,
use use Monolog\Logger;
class MyLogger extends Logger {
public function addRecord($level, $message, array $context = array()){
// my custom logging implementation
}
}
Однако, когда я пытаюсь что-то зарегистрировать, создается впечатление, что сообщение журнала проходит не через этот расширенный класс, а через базовый класс Monolog Logger
. Однако он вызывает правильный метод формата класса MyLineFormatter
. Я знаю это, потому что он выдает ошибку, поскольку не может получить доступ к параметрам, которые должен установить мой пользовательский класс логгера. Кроме того, я поставил трассировку стека, и она печатает, что сообщение проходит через базовый класс Logger
.
Есть причина для этого? Как я могу исправить эту проблему?