123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- <?php
- namespace App\Logging;
- use Illuminate\Log\Logger;
- use Monolog\Formatter\LineFormatter;
- class CustomizeFormatter
- {
- /**
- * 自定义给定的日志实例。
- */
- public function __invoke(Logger $logger): void
- {
- foreach ($logger->getHandlers() as $handler) {
- $handler->setFormatter(new LineFormatter(
- "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n",
- 'Y-m-d H:i:s',
- true,
- true
- ));
- // 添加更严格的过滤器
- $handler->pushProcessor(function ($record) {
- // 1. 允许SQL日志
- if (str_contains($record['message'], 'sql:')) {
- return $record;
- }
- // 2. 过滤所有来自vendor目录的日志
- if (isset($record['file']) && str_contains($record['file'], '/vendor/')) {
- return false;
- }
- // 3. 过滤框架的默认日志通道
- if (isset($record['channel']) && in_array($record['channel'], [
- 'laravel',
- 'framework',
- 'security',
- 'request',
- 'schedule',
- 'queue',
- ])) {
- return false;
- }
- // 4. 只允许来自app目录的日志
- if (isset($record['file']) && str_contains($record['file'], '/app/')) {
- return $record;
- }
- // 5. 默认过滤掉所有其他日志
- return false;
- });
- }
- }
- }
|