LoggerPlugin.php 3.7 KB

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