TYPO3 API  SVNRelease
LoggerPlugin.php
Go to the documentation of this file.
00001 <?php
00002 
00003 /*
00004  * This file is part of SwiftMailer.
00005  * (c) 2004-2009 Chris Corbyn
00006  *
00007  * For the full copyright and license information, please view the LICENSE
00008  * file that was distributed with this source code.
00009  */
00010 
00011 //@require 'Swift/Events/CommandListener.php';
00012 //@require 'Swift/Events/CommandEvent.php';
00013 //@require 'Swift/Events/ResponseListener.php';
00014 //@require 'Swift/Events/ResponseEvent.php';
00015 //@require 'Swift/Events/TransportChangeListener.php';
00016 //@require 'Swift/Events/TransportChangeEvent.php';
00017 //@require 'Swift/Events/TransportExceptionEvent.php';
00018 //@require 'Swift/Events/TransportExceptionListener.php';
00019 //@require 'Swift/Events/TransportException.php';
00020 //@require 'Swift/Plugins/Logger.php';
00021 
00022 /**
00023  * Does real time logging of Transport level information.
00024  *
00025  * @package Swift
00026  * @subpackage Plugins
00027  *
00028  * @author Chris Corbyn
00029  */
00030 class Swift_Plugins_LoggerPlugin
00031   implements Swift_Events_CommandListener, Swift_Events_ResponseListener,
00032   Swift_Events_TransportChangeListener, Swift_Events_TransportExceptionListener,
00033   Swift_Plugins_Logger
00034 {
00035 
00036   /** The logger which is delegated to */
00037   private $_logger;
00038 
00039   /**
00040    * Create a new LoggerPlugin using $logger.
00041    *
00042    * @param Swift_Plugins_Logger $logger
00043    */
00044   public function __construct(Swift_Plugins_Logger $logger)
00045   {
00046     $this->_logger = $logger;
00047   }
00048 
00049   /**
00050    * Add a log entry.
00051    *
00052    * @param string $entry
00053    */
00054   public function add($entry)
00055   {
00056     $this->_logger->add($entry);
00057   }
00058 
00059   /**
00060    * Clear the log contents.
00061    */
00062   public function clear()
00063   {
00064     $this->_logger->clear();
00065   }
00066 
00067   /**
00068    * Get this log as a string.
00069    *
00070    * @return string
00071    */
00072   public function dump()
00073   {
00074     return $this->_logger->dump();
00075   }
00076 
00077   /**
00078    * Invoked immediately following a command being sent.
00079    *
00080    * @param Swift_Events_ResponseEvent $evt
00081    */
00082   public function commandSent(Swift_Events_CommandEvent $evt)
00083   {
00084     $command = $evt->getCommand();
00085     $this->_logger->add(sprintf(">> %s", $command));
00086   }
00087 
00088   /**
00089    * Invoked immediately following a response coming back.
00090    *
00091    * @param Swift_Events_ResponseEvent $evt
00092    */
00093   public function responseReceived(Swift_Events_ResponseEvent $evt)
00094   {
00095     $response = $evt->getResponse();
00096     $this->_logger->add(sprintf("<< %s", $response));
00097   }
00098 
00099   /**
00100    * Invoked just before a Transport is started.
00101    *
00102    * @param Swift_Events_TransportChangeEvent $evt
00103    */
00104   public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt)
00105   {
00106     $transportName = get_class($evt->getSource());
00107     $this->_logger->add(sprintf("++ Starting %s", $transportName));
00108   }
00109 
00110   /**
00111    * Invoked immediately after the Transport is started.
00112    *
00113    * @param Swift_Events_TransportChangeEvent $evt
00114    */
00115   public function transportStarted(Swift_Events_TransportChangeEvent $evt)
00116   {
00117     $transportName = get_class($evt->getSource());
00118     $this->_logger->add(sprintf("++ %s started", $transportName));
00119   }
00120 
00121   /**
00122    * Invoked just before a Transport is stopped.
00123    *
00124    * @param Swift_Events_TransportChangeEvent $evt
00125    */
00126   public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt)
00127   {
00128     $transportName = get_class($evt->getSource());
00129     $this->_logger->add(sprintf("++ Stopping %s", $transportName));
00130   }
00131 
00132   /**
00133    * Invoked immediately after the Transport is stopped.
00134    *
00135    * @param Swift_Events_TransportChangeEvent $evt
00136    */
00137   public function transportStopped(Swift_Events_TransportChangeEvent $evt)
00138   {
00139     $transportName = get_class($evt->getSource());
00140     $this->_logger->add(sprintf("++ %s stopped", $transportName));
00141   }
00142 
00143   /**
00144    * Invoked as a TransportException is thrown in the Transport system.
00145    *
00146    * @param Swift_Events_TransportExceptionEvent $evt
00147    */
00148   public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt)
00149   {
00150     $e = $evt->getException();
00151     $message = $e->getMessage();
00152     $this->_logger->add(sprintf("!! %s", $message));
00153     $message .= PHP_EOL;
00154     $message .= 'Log data:' . PHP_EOL;
00155     $message .= $this->_logger->dump();
00156     $evt->cancelBubble();
00157     throw new Swift_TransportException($message);
00158   }
00159 
00160 }