ฉันต้องการแทนที่บริการ logger.filelog จาก ไฟล์ล็อก โมดูลเพื่อใช้ parser ของฉันเอง
เกิดข้อผิดพลาดผ่าน ซิม
และ ดรัช cr
เมื่อเปิดใช้งานโมดูลแบบกำหนดเองใหม่ที่แทนที่บริการ
เว็บไซต์พบข้อผิดพลาดที่ไม่คาดคิด กรุณาลองใหม่อีกครั้งในภายหลัง.
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
- src
- คนตัดไม้
- TestFilelog.php
CustomModuleServiceProvider.php
custom_module.info.yml
custom_module.module
ขณะนี้มีการใช้งานคลาสผู้ให้บริการ ServiceModifierInterface
และแก้ไขบริการ logger.filelog ดั้งเดิมโดยตั้งค่าคลาสเป็น Drupal\custom_module\Logger\TestFilelog
.
/**
* คลาสที่จะแทนที่บริการโมดูล logger.filelog ที่สนับสนุน
*/
คลาส CustomModuleServiceProvider ใช้ ServiceModifierInterface {
/**
* {@inheritdoc}
*/
ฟังก์ชั่นสาธารณะแก้ไข (ContainerBuilder $container) {
ถ้า ($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 ผสม $level
* ระดับความรุนแรงของข้อความบันทึก
* @param สตริง $ข้อความ
* เนื้อหาของข้อความบันทึก
* @param อาร์เรย์ $context
* บริบทของข้อความบันทึก
*
* @return สตริง
* ข้อความที่จัดรูปแบบ
*/
ฟังก์ชันที่ได้รับการป้องกันแสดงผล ($level, $message, อาร์เรย์ $context = []): สตริง {
$plainString = parent::render($level, $message, $context);
$custom_channel = [
'filter_custom_channel'
];
ถ้า (in_array($context['channel'], $custom_channel)) {
$plainString = $this->parseStrMasking($plainString);
}
ส่งคืน $plainString;
}
/**
* ปกปิดรายละเอียดส่วนบุคคลตั้งแต่สตริงจนถึงบันทึก
*
* @param สตริง $pureString
* สตริงที่จะแยกวิเคราะห์
*
* @return สตริง
* สตริงที่ถูกปิดบัง
*/
ฟังก์ชันที่ได้รับการป้องกัน parseStrMasking (string $pureString) {
// ค่าเริ่มต้นเพื่อส่งคืน FinalString
$finalString = $pureString;
// การแยกวิเคราะห์แบบกำหนดเองไปที่นี่
ส่งคืน $finalString;
}
}
ฉันเห็นว่า Drupal\filelog\Logger\FileLog;
มี ใช้ RfcLoggerTrait;
ซึ่งดำเนินการ Psr\Log\LoggerInterface
, นี่ฉันพลาดอะไรไป??