Нет описания

LoggerFactory.php 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. <?php
  2. namespace MailPoet\Logging;
  3. if (!defined('ABSPATH')) exit;
  4. use MailPoet\DI\ContainerWrapper;
  5. use MailPoet\Settings\SettingsController;
  6. use MailPoetVendor\Monolog\Processor\IntrospectionProcessor;
  7. use MailPoetVendor\Monolog\Processor\MemoryUsageProcessor;
  8. use MailPoetVendor\Monolog\Processor\WebProcessor;
  9. /**
  10. * Usage:
  11. * $logger = Logger::getLogger('logger name');
  12. * $logger->addDebug('This is a debug message');
  13. * $logger->addInfo('This is an info');
  14. * $logger->addWarning('This is a warning');
  15. * $logger->addError('This is an error message');
  16. *
  17. * By default only errors are saved but can be changed in settings to save everything or nothing
  18. *
  19. * Name is anything which will be found in the log table.
  20. * We can use it for separating different messages like: 'cron', 'rendering', 'export', ...
  21. *
  22. * If WP_DEBUG is true additional information will be added to every log message.
  23. */
  24. class LoggerFactory {
  25. const TOPIC_NEWSLETTERS = 'newsletters';
  26. const TOPIC_POST_NOTIFICATIONS = 'post-notifications';
  27. const TOPIC_MSS = 'mss';
  28. const TOPIC_SENDING = 'sending';
  29. /** @var LoggerFactory */
  30. private static $instance;
  31. /** @var \MailPoetVendor\Monolog\Logger[] */
  32. private $loggerInstances = [];
  33. /** @var SettingsController */
  34. private $settings;
  35. /** @var LogRepository */
  36. private $logRepository;
  37. public function __construct(
  38. LogRepository $logRepository,
  39. SettingsController $settings
  40. ) {
  41. $this->settings = $settings;
  42. $this->logRepository = $logRepository;
  43. }
  44. /**
  45. * @param string $name
  46. * @param bool $attachProcessors
  47. *
  48. * @return \MailPoetVendor\Monolog\Logger
  49. */
  50. public function getLogger($name = 'MailPoet', $attachProcessors = WP_DEBUG) {
  51. if (!isset($this->loggerInstances[$name])) {
  52. $this->loggerInstances[$name] = new \MailPoetVendor\Monolog\Logger($name);
  53. if ($attachProcessors) {
  54. // Adds the line/file/class/method from which the log call originated
  55. $this->loggerInstances[$name]->pushProcessor(new IntrospectionProcessor());
  56. // Adds the current request URI, request method and client IP to a log record
  57. $this->loggerInstances[$name]->pushProcessor(new WebProcessor());
  58. // Adds the current memory usage to a log record
  59. $this->loggerInstances[$name]->pushProcessor(new MemoryUsageProcessor());
  60. }
  61. $this->loggerInstances[$name]->pushHandler(new LogHandler($this->logRepository, $this->getDefaultLogLevel()));
  62. }
  63. return $this->loggerInstances[$name];
  64. }
  65. public static function getInstance() {
  66. if (!self::$instance instanceof LoggerFactory) {
  67. self::$instance = new LoggerFactory(
  68. ContainerWrapper::getInstance()->get(LogRepository::class),
  69. SettingsController::getInstance()
  70. );
  71. }
  72. return self::$instance;
  73. }
  74. private function getDefaultLogLevel() {
  75. $logLevel = $this->settings->get('logging', 'errors');
  76. switch ($logLevel) {
  77. case 'everything':
  78. return \MailPoetVendor\Monolog\Logger::DEBUG;
  79. case 'nothing':
  80. return \MailPoetVendor\Monolog\Logger::EMERGENCY;
  81. default:
  82. return \MailPoetVendor\Monolog\Logger::ERROR;
  83. }
  84. }
  85. }