LoggerPlugin.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. /*
  3. * This file is part of SwiftMailer.
  4. * (c) 2004-2009 Chris Corbyn
  5. *
  6. * For the full copyright and license information, please view the LICENSE
  7. * file that was distributed with this source code.
  8. */
  9. /**
  10. * Does real time logging of Transport level information.
  11. *
  12. * @author Chris Corbyn
  13. */
  14. class Swift_Plugins_LoggerPlugin implements Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_Events_TransportChangeListener, Swift_Events_TransportExceptionListener, Swift_Plugins_Logger
  15. {
  16. /** The logger which is delegated to */
  17. private $logger;
  18. /**
  19. * Create a new LoggerPlugin using $logger.
  20. */
  21. public function __construct(Swift_Plugins_Logger $logger)
  22. {
  23. $this->logger = $logger;
  24. }
  25. /**
  26. * Add a log entry.
  27. *
  28. * @param string $entry
  29. */
  30. public function add($entry)
  31. {
  32. $this->logger->add($entry);
  33. }
  34. /**
  35. * Clear the log contents.
  36. */
  37. public function clear()
  38. {
  39. $this->logger->clear();
  40. }
  41. /**
  42. * Get this log as a string.
  43. *
  44. * @return string
  45. */
  46. public function dump()
  47. {
  48. return $this->logger->dump();
  49. }
  50. /**
  51. * Invoked immediately following a command being sent.
  52. */
  53. public function commandSent(Swift_Events_CommandEvent $evt)
  54. {
  55. $command = $evt->getCommand();
  56. $this->logger->add(sprintf('>> %s', $command));
  57. }
  58. /**
  59. * Invoked immediately following a response coming back.
  60. */
  61. public function responseReceived(Swift_Events_ResponseEvent $evt)
  62. {
  63. $response = $evt->getResponse();
  64. $this->logger->add(sprintf('<< %s', $response));
  65. }
  66. /**
  67. * Invoked just before a Transport is started.
  68. */
  69. public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt)
  70. {
  71. $transportName = \get_class($evt->getSource());
  72. $this->logger->add(sprintf('++ Starting %s', $transportName));
  73. }
  74. /**
  75. * Invoked immediately after the Transport is started.
  76. */
  77. public function transportStarted(Swift_Events_TransportChangeEvent $evt)
  78. {
  79. $transportName = \get_class($evt->getSource());
  80. $this->logger->add(sprintf('++ %s started', $transportName));
  81. }
  82. /**
  83. * Invoked just before a Transport is stopped.
  84. */
  85. public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt)
  86. {
  87. $transportName = \get_class($evt->getSource());
  88. $this->logger->add(sprintf('++ Stopping %s', $transportName));
  89. }
  90. /**
  91. * Invoked immediately after the Transport is stopped.
  92. */
  93. public function transportStopped(Swift_Events_TransportChangeEvent $evt)
  94. {
  95. $transportName = \get_class($evt->getSource());
  96. $this->logger->add(sprintf('++ %s stopped', $transportName));
  97. }
  98. /**
  99. * Invoked as a TransportException is thrown in the Transport system.
  100. */
  101. public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt)
  102. {
  103. $e = $evt->getException();
  104. $message = $e->getMessage();
  105. $code = $e->getCode();
  106. $this->logger->add(sprintf('!! %s (code: %s)', $message, $code));
  107. $message .= PHP_EOL;
  108. $message .= 'Log data:'.PHP_EOL;
  109. $message .= $this->logger->dump();
  110. $evt->cancelBubble();
  111. throw new Swift_TransportException($message, $code, $e->getPrevious());
  112. }
  113. }