Tôi muốn ghi đè dịch vụ logger.filelog từ hồ sơ module để sử dụng trình phân tích cú pháp của riêng tôi.
Một lỗi xảy ra thông qua drush cim
và drush cr
khi mô-đun tùy chỉnh mới ghi đè dịch vụ được bật.
Trang web này gặp phải một lỗi không mong muốn. Vui lòng thử lại sau.
Symfony\Component\DependencyInjection\Exception\LogicException: Dịch vụ 'logger.filelog' cho người tiêu dùng 'logger.factory' không triển khai Psr\Log\LoggerInterface. trong Drupal\Core\DependencyInjection\Compiler\TaggedHandlersPass-> processServiceCollectorPass() (dòng 182 của /app/docroot/core/lib/Drupal/Core/DependencyInjection/Compiler/TaggedHandlersPass.php).
Cấu trúc mô-đun tùy chỉnh của tôi trông như thế này
custom_module
- src
- Tiều phu
- TestFilelog.php
CustomModuleServiceProvider.php
custom_module.info.yml
custom_module.module
Hiện tại lớp nhà cung cấp dịch vụ đã triển khai ServiceModifierGiao diện
và thay đổi dịch vụ logger.filelog ban đầu bằng cách đặt lớp của nó thành Drupal\custom_module\Logger\TestFilelog
.
/**
* Lớp ghi đè mô-đun đóng góp dịch vụ logger.filelog.
*/
lớp CustomModuleServiceProvider triển khai ServiceModifierInterface {
/**
* {@inheritdoc}
*/
chức năng công cộng thay đổi (ContainerBuilder $container) {
if ($container->has('logger.filelog')) {
$definition = $container->getDefinition('logger.filelog');
$definition->setClass('Drupal\custom_module\Logger\TestFilelog');
}
}
}
TestFilelog.php
không gian tên Drupal\custom_module\Logger;
sử dụng Drupal\filelog\Logger\FileLog;
/**
* Trình ghi nhật ký dựa trên tệp.
*/
lớp TestFileLog mở rộng FileLog {
/**
* Kết xuất một tin nhắn thành một chuỗi.
*
* @param mức $ hỗn hợp
* Mức độ nghiêm trọng của thông điệp tường trình.
* @param chuỗi $message
* Nội dung thông điệp tường trình.
* Mảng @param $context
* Bối cảnh của thông điệp tường trình.
*
* chuỗi @return
* Tin nhắn được định dạng.
*/
hàm được bảo vệ kết xuất($level, $message, array $context = []): string {
$plainString = parent::render($level, $message, $context);
$custom_channel = [
'filter_custom_channel'
];
if (in_array($context['channel'], $custom_channel)) {
$plainString = $this->parseStrMasking($plainString);
}
trả về $plainString;
}
/**
* Mặt nạ chi tiết cá nhân từ chuỗi để bản ghi.
*
* @param chuỗi $pureString
* Chuỗi được phân tích cú pháp.
*
* chuỗi @return
* Chuỗi đã được che dấu.
*/
hàm được bảo vệ parseStrMasking(string $pureString) {
// Mặc định trả về finalString.
$ finalString = $pureString;
// Phân tích cú pháp tùy chỉnh ở đây.
trả lại $ finalString;
}
}
tôi thấy rằng Drupal\filelog\Logger\FileLog;
có sử dụng RfcLoggerTrait;
cái nào thực hiện Psr\Log\LoggerGiao diện
, tôi đang thiếu gì ở đây ??