LoggerPlugin.php 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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. * @package Swift
  13. * @subpackage Plugins
  14. * @author Chris Corbyn
  15. */
  16. class Swift_Plugins_LoggerPlugin implements Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_Events_TransportChangeListener, Swift_Events_TransportExceptionListener, Swift_Plugins_Logger
  17. {
  18. /** The logger which is delegated to */
  19. private $_logger;
  20. /**
  21. * Create a new LoggerPlugin using $logger.
  22. *
  23. * @param Swift_Plugins_Logger $logger
  24. */
  25. public function __construct(Swift_Plugins_Logger $logger)
  26. {
  27. $this->_logger = $logger;
  28. }
  29. /**
  30. * Add a log entry.
  31. *
  32. * @param string $entry
  33. */
  34. public function add($entry)
  35. {
  36. $this->_logger->add($entry);
  37. }
  38. /**
  39. * Clear the log contents.
  40. */
  41. public function clear()
  42. {
  43. $this->_logger->clear();
  44. }
  45. /**
  46. * Get this log as a string.
  47. *
  48. * @return string
  49. */
  50. public function dump()
  51. {
  52. return $this->_logger->dump();
  53. }
  54. /**
  55. * Invoked immediately following a command being sent.
  56. *
  57. * @param Swift_Events_CommandEvent $evt
  58. */
  59. public function commandSent(Swift_Events_CommandEvent $evt)
  60. {
  61. $command = $evt->getCommand();
  62. $this->_logger->add(sprintf(">> %s", $command));
  63. }
  64. /**
  65. * Invoked immediately following a response coming back.
  66. *
  67. * @param Swift_Events_ResponseEvent $evt
  68. */
  69. public function responseReceived(Swift_Events_ResponseEvent $evt)
  70. {
  71. $response = $evt->getResponse();
  72. $this->_logger->add(sprintf("<< %s", $response));
  73. }
  74. /**
  75. * Invoked just before a Transport is started.
  76. *
  77. * @param Swift_Events_TransportChangeEvent $evt
  78. */
  79. public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt)
  80. {
  81. $transportName = get_class($evt->getSource());
  82. $this->_logger->add(sprintf("++ Starting %s", $transportName));
  83. }
  84. /**
  85. * Invoked immediately after the Transport is started.
  86. *
  87. * @param Swift_Events_TransportChangeEvent $evt
  88. */
  89. public function transportStarted(Swift_Events_TransportChangeEvent $evt)
  90. {
  91. $transportName = get_class($evt->getSource());
  92. $this->_logger->add(sprintf("++ %s started", $transportName));
  93. }
  94. /**
  95. * Invoked just before a Transport is stopped.
  96. *
  97. * @param Swift_Events_TransportChangeEvent $evt
  98. */
  99. public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt)
  100. {
  101. $transportName = get_class($evt->getSource());
  102. $this->_logger->add(sprintf("++ Stopping %s", $transportName));
  103. }
  104. /**
  105. * Invoked immediately after the Transport is stopped.
  106. *
  107. * @param Swift_Events_TransportChangeEvent $evt
  108. */
  109. public function transportStopped(Swift_Events_TransportChangeEvent $evt)
  110. {
  111. $transportName = get_class($evt->getSource());
  112. $this->_logger->add(sprintf("++ %s stopped", $transportName));
  113. }
  114. /**
  115. * Invoked as a TransportException is thrown in the Transport system.
  116. *
  117. * @param Swift_Events_TransportExceptionEvent $evt
  118. */
  119. public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt)
  120. {
  121. $e = $evt->getException();
  122. $message = $e->getMessage();
  123. $this->_logger->add(sprintf("!! %s", $message));
  124. $message .= PHP_EOL;
  125. $message .= 'Log data:' . PHP_EOL;
  126. $message .= $this->_logger->dump();
  127. $evt->cancelBubble();
  128. throw new Swift_TransportException($message);
  129. }
  130. }