CustomizeFormatter.php 1.9 KB

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