CustomizeFormatter.php 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Logging;
  3. use Illuminate\Log\Logger;
  4. use Monolog\Formatter\LineFormatter;
  5. class CustomizeFormatter
  6. {
  7. /**
  8. * 自定义给定的日志实例。
  9. */
  10. public function __invoke(Logger $logger): void
  11. {
  12. foreach ($logger->getHandlers() as $handler) {
  13. $handler->setFormatter(new LineFormatter(
  14. "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n",
  15. 'Y-m-d H:i:s',
  16. true,
  17. true
  18. ));
  19. // 添加更严格的过滤器
  20. $handler->pushProcessor(function ($record) {
  21. // 1. 允许SQL日志
  22. if (str_contains($record['message'], 'sql:')) {
  23. return $record;
  24. }
  25. // 2. 过滤所有来自vendor目录的日志
  26. if (isset($record['file']) && str_contains($record['file'], '/vendor/')) {
  27. return false;
  28. }
  29. // 3. 过滤框架的默认日志通道
  30. if (isset($record['channel']) && in_array($record['channel'], [
  31. 'laravel',
  32. 'framework',
  33. 'security',
  34. 'request',
  35. 'schedule',
  36. 'queue',
  37. ])) {
  38. return false;
  39. }
  40. // 4. 只允许来自app目录的日志
  41. if (isset($record['file']) && str_contains($record['file'], '/app/')) {
  42. return $record;
  43. }
  44. // 5. 默认过滤掉所有其他日志
  45. return false;
  46. });
  47. }
  48. }
  49. }