Я хотел переопределить службу logger.filelog из файлжурнал модуль, чтобы использовать мой собственный парсер.
Произошла ошибка через драш цим
и драш кр
когда новый пользовательский модуль, который переопределяет службу, включен.
Сайт обнаружил непредвиденную ошибку. Пожалуйста, повторите попытку позже.
Symfony\Component\DependencyInjection\Exception\LogicException: служба 'logger.filelog' для потребителя 'logger.factory' не реализует Psr\Log\LoggerInterface. в Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass->processServiceCollectorPass() (строка 182 файла /app/docroot/core/lib/Drupal/Core/DependencyInjection/Compiler/TaggedHandlersPass.php).
Структура моих пользовательских модулей выглядит так
custom_module
- источник
- Регистратор
- TestFilelog.php
CustomModuleServiceProvider.php
custom_module.info.yml
custom_module.module
В настоящее время класс поставщика услуг реализовал ServiceModifierInterface
и изменил исходный сервис logger.filelog, установив для его класса значение Drupal\custom_module\Logger\TestFilelog
.
/**
* Класс для переопределения службы logger.filelog модуля contrib.
*/
класс CustomModuleServiceProvider реализует ServiceModifierInterface {
/**
* {@inheritdoc}
*/
общедоступная функция изменить (ContainerBuilder $ контейнер) {
если ($container->has('logger.filelog')) {
$definition = $container->getDefinition('logger.filelog');
$definition->setClass('Drupal\custom_module\Logger\TestFilelog');
}
}
}
TestFilelog.php
пространство имен Drupal\custom_module\Logger;
используйте Drupal\filelog\Logger\FileLog;
/**
* Файловый регистратор.
*/
класс TestFileLog расширяет FileLog {
/**
* Выводит сообщение в строку.
*
* @param смешанный уровень $
* Уровень серьезности сообщения журнала.
* @param строка $сообщение
* Содержание сообщения журнала.
* массив @param $контекст
* Контекст сообщения журнала.
*
* @возвратная строка
* Отформатированное сообщение.
*/
рендер защищенной функции ($ уровень, $ сообщение, массив $ контекст = []): строка {
$plainString = parent::render($level, $message, $context);
$ пользовательский_канал = [
'filter_custom_channel'
];
если (in_array($context['канал'], $custom_channel)) {
$plainString = $this->parseStrMasking($plainString);
}
вернуть $plainString;
}
/**
* Маскируйте личные данные из строк в журналы.
*
* @param строка $pureString
* Строка для анализа.
*
* @возвратная строка
* Строка, которая была замаскирована.
*/
защищенная функция parseStrMasking(строка $pureString) {
// По умолчанию возвращается finalString.
$finalString = $чистая строка;
// Здесь идет пользовательский синтаксический анализ.
вернуть $finalString;
}
}
я вижу это Drupal\filelog\Logger\FileLog;
имеет использовать RfcLoggerTrait;
который реализует Пср\лог\логгеринтерфейс
, что мне здесь не хватает??