Repository: logging-log4php Updated Branches: refs/heads/mailevent [created] 458b48ece
LoggerAppenderMail: added dependency injection The Mailer object can be injected, this makes the class testable and should fix problems with TravisCI. Signed-off-by: Ivan Habunek <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/logging-log4php/repo Commit: http://git-wip-us.apache.org/repos/asf/logging-log4php/commit/ad8995b1 Tree: http://git-wip-us.apache.org/repos/asf/logging-log4php/tree/ad8995b1 Diff: http://git-wip-us.apache.org/repos/asf/logging-log4php/diff/ad8995b1 Branch: refs/heads/mailevent Commit: ad8995b104286eaa3e11e2e63d65f866844ad3db Parents: c923958 Author: Ivan Habunek <[email protected]> Authored: Thu May 15 12:19:34 2014 +0200 Committer: Ivan Habunek <[email protected]> Committed: Thu May 15 12:19:34 2014 +0200 ---------------------------------------------------------------------- src/main/php/LoggerAutoloader.php | 284 ++++++++++--------- src/main/php/appenders/LoggerAppenderMail.php | 67 +++-- src/main/php/helpers/LoggerMailerInterface.php | 32 +++ src/main/php/helpers/LoggerMailerPHP.php | 34 +++ .../php/appenders/LoggerAppenderMailTest.php | 119 ++++++++ 5 files changed, 371 insertions(+), 165 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/logging-log4php/blob/ad8995b1/src/main/php/LoggerAutoloader.php ---------------------------------------------------------------------- diff --git a/src/main/php/LoggerAutoloader.php b/src/main/php/LoggerAutoloader.php index d633562..29da2e9 100644 --- a/src/main/php/LoggerAutoloader.php +++ b/src/main/php/LoggerAutoloader.php @@ -1,144 +1,146 @@ -<?php -/** - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * @package log4php - */ - -if (function_exists('__autoload')) { - trigger_error("log4php: It looks like your code is using an __autoload() function. log4php uses spl_autoload_register() which will bypass your __autoload() function and may break autoloading.", E_USER_WARNING); -} - -spl_autoload_register(array('LoggerAutoloader', 'autoload')); - -/** - * Class autoloader. - * - * @package log4php - * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 - */ -class LoggerAutoloader { - - /** Maps classnames to files containing the class. */ - private static $classes = array( - - // Base - 'LoggerAppender' => '/LoggerAppender.php', - 'LoggerAppenderPool' => '/LoggerAppenderPool.php', - 'LoggerConfigurable' => '/LoggerConfigurable.php', - 'LoggerConfigurator' => '/LoggerConfigurator.php', - 'LoggerException' => '/LoggerException.php', - 'LoggerFilter' => '/LoggerFilter.php', - 'LoggerHierarchy' => '/LoggerHierarchy.php', - 'LoggerLevel' => '/LoggerLevel.php', - 'LoggerLocationInfo' => '/LoggerLocationInfo.php', - 'LoggerLoggingEvent' => '/LoggerLoggingEvent.php', - 'LoggerMDC' => '/LoggerMDC.php', - 'LoggerNDC' => '/LoggerNDC.php', - 'LoggerLayout' => '/LoggerLayout.php', - 'LoggerReflectionUtils' => '/LoggerReflectionUtils.php', - 'LoggerRoot' => '/LoggerRoot.php', - 'LoggerThrowableInformation' => '/LoggerThrowableInformation.php', - - // Appenders +<?php +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @package log4php + */ + +if (function_exists('__autoload')) { + trigger_error("log4php: It looks like your code is using an __autoload() function. log4php uses spl_autoload_register() which will bypass your __autoload() function and may break autoloading.", E_USER_WARNING); +} + +spl_autoload_register(array('LoggerAutoloader', 'autoload')); + +/** + * Class autoloader. + * + * @package log4php + * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 + */ +class LoggerAutoloader { + + /** Maps classnames to files containing the class. */ + private static $classes = array( + + // Base + 'LoggerAppender' => '/LoggerAppender.php', + 'LoggerAppenderPool' => '/LoggerAppenderPool.php', + 'LoggerConfigurable' => '/LoggerConfigurable.php', + 'LoggerConfigurator' => '/LoggerConfigurator.php', + 'LoggerException' => '/LoggerException.php', + 'LoggerFilter' => '/LoggerFilter.php', + 'LoggerHierarchy' => '/LoggerHierarchy.php', + 'LoggerLevel' => '/LoggerLevel.php', + 'LoggerLocationInfo' => '/LoggerLocationInfo.php', + 'LoggerLoggingEvent' => '/LoggerLoggingEvent.php', + 'LoggerMDC' => '/LoggerMDC.php', + 'LoggerNDC' => '/LoggerNDC.php', + 'LoggerLayout' => '/LoggerLayout.php', + 'LoggerReflectionUtils' => '/LoggerReflectionUtils.php', + 'LoggerRoot' => '/LoggerRoot.php', + 'LoggerThrowableInformation' => '/LoggerThrowableInformation.php', + + // Appenders 'LoggerAppenderAMQP' => '/appenders/LoggerAppenderAMQP.php', - 'LoggerAppenderConsole' => '/appenders/LoggerAppenderConsole.php', - 'LoggerAppenderDailyFile' => '/appenders/LoggerAppenderDailyFile.php', - 'LoggerAppenderEcho' => '/appenders/LoggerAppenderEcho.php', - 'LoggerAppenderFile' => '/appenders/LoggerAppenderFile.php', + 'LoggerAppenderConsole' => '/appenders/LoggerAppenderConsole.php', + 'LoggerAppenderDailyFile' => '/appenders/LoggerAppenderDailyFile.php', + 'LoggerAppenderEcho' => '/appenders/LoggerAppenderEcho.php', + 'LoggerAppenderFile' => '/appenders/LoggerAppenderFile.php', 'LoggerAppenderGraylog2' => '/appenders/LoggerAppenderGraylog2.php', - 'LoggerAppenderMail' => '/appenders/LoggerAppenderMail.php', - 'LoggerAppenderMailEvent' => '/appenders/LoggerAppenderMailEvent.php', - 'LoggerAppenderMongoDB' => '/appenders/LoggerAppenderMongoDB.php', - 'LoggerAppenderNull' => '/appenders/LoggerAppenderNull.php', - 'LoggerAppenderFirePHP' => '/appenders/LoggerAppenderFirePHP.php', - 'LoggerAppenderPDO' => '/appenders/LoggerAppenderPDO.php', - 'LoggerAppenderPhp' => '/appenders/LoggerAppenderPhp.php', - 'LoggerAppenderRollingFile' => '/appenders/LoggerAppenderRollingFile.php', - 'LoggerAppenderSocket' => '/appenders/LoggerAppenderSocket.php', - 'LoggerAppenderSyslog' => '/appenders/LoggerAppenderSyslog.php', - - // Configurators - 'LoggerConfigurationAdapter' => '/configurators/LoggerConfigurationAdapter.php', - 'LoggerConfigurationAdapterINI' => '/configurators/LoggerConfigurationAdapterINI.php', - 'LoggerConfigurationAdapterPHP' => '/configurators/LoggerConfigurationAdapterPHP.php', - 'LoggerConfigurationAdapterXML' => '/configurators/LoggerConfigurationAdapterXML.php', - 'LoggerConfiguratorDefault' => '/configurators/LoggerConfiguratorDefault.php', - - // Filters - 'LoggerFilterDenyAll' => '/filters/LoggerFilterDenyAll.php', - 'LoggerFilterLevelMatch' => '/filters/LoggerFilterLevelMatch.php', - 'LoggerFilterLevelRange' => '/filters/LoggerFilterLevelRange.php', - 'LoggerFilterStringMatch' => '/filters/LoggerFilterStringMatch.php', - - // Helpers - 'LoggerFormattingInfo' => '/helpers/LoggerFormattingInfo.php', - 'LoggerOptionConverter' => '/helpers/LoggerOptionConverter.php', - 'LoggerPatternParser' => '/helpers/LoggerPatternParser.php', - 'LoggerUtils' => '/helpers/LoggerUtils.php', - - // Pattern converters - 'LoggerPatternConverter' => '/pattern/LoggerPatternConverter.php', - 'LoggerPatternConverterClass' => '/pattern/LoggerPatternConverterClass.php', - 'LoggerPatternConverterCookie' => '/pattern/LoggerPatternConverterCookie.php', - 'LoggerPatternConverterDate' => '/pattern/LoggerPatternConverterDate.php', - 'LoggerPatternConverterEnvironment' => '/pattern/LoggerPatternConverterEnvironment.php', - 'LoggerPatternConverterFile' => '/pattern/LoggerPatternConverterFile.php', - 'LoggerPatternConverterLevel' => '/pattern/LoggerPatternConverterLevel.php', - 'LoggerPatternConverterLine' => '/pattern/LoggerPatternConverterLine.php', - 'LoggerPatternConverterLiteral' => '/pattern/LoggerPatternConverterLiteral.php', - 'LoggerPatternConverterLocation' => '/pattern/LoggerPatternConverterLocation.php', - 'LoggerPatternConverterLogger' => '/pattern/LoggerPatternConverterLogger.php', - 'LoggerPatternConverterMDC' => '/pattern/LoggerPatternConverterMDC.php', - 'LoggerPatternConverterMessage' => '/pattern/LoggerPatternConverterMessage.php', - 'LoggerPatternConverterMethod' => '/pattern/LoggerPatternConverterMethod.php', - 'LoggerPatternConverterNDC' => '/pattern/LoggerPatternConverterNDC.php', - 'LoggerPatternConverterNewLine' => '/pattern/LoggerPatternConverterNewLine.php', - 'LoggerPatternConverterProcess' => '/pattern/LoggerPatternConverterProcess.php', - 'LoggerPatternConverterRelative' => '/pattern/LoggerPatternConverterRelative.php', - 'LoggerPatternConverterRequest' => '/pattern/LoggerPatternConverterRequest.php', - 'LoggerPatternConverterServer' => '/pattern/LoggerPatternConverterServer.php', - 'LoggerPatternConverterSession' => '/pattern/LoggerPatternConverterSession.php', - 'LoggerPatternConverterSessionID' => '/pattern/LoggerPatternConverterSessionID.php', - 'LoggerPatternConverterSuperglobal' => '/pattern/LoggerPatternConverterSuperglobal.php', - 'LoggerPatternConverterThrowable' => '/pattern/LoggerPatternConverterThrowable.php', - - // Layouts + 'LoggerAppenderMail' => '/appenders/LoggerAppenderMail.php', + 'LoggerAppenderMailEvent' => '/appenders/LoggerAppenderMailEvent.php', + 'LoggerAppenderMongoDB' => '/appenders/LoggerAppenderMongoDB.php', + 'LoggerAppenderNull' => '/appenders/LoggerAppenderNull.php', + 'LoggerAppenderFirePHP' => '/appenders/LoggerAppenderFirePHP.php', + 'LoggerAppenderPDO' => '/appenders/LoggerAppenderPDO.php', + 'LoggerAppenderPhp' => '/appenders/LoggerAppenderPhp.php', + 'LoggerAppenderRollingFile' => '/appenders/LoggerAppenderRollingFile.php', + 'LoggerAppenderSocket' => '/appenders/LoggerAppenderSocket.php', + 'LoggerAppenderSyslog' => '/appenders/LoggerAppenderSyslog.php', + + // Configurators + 'LoggerConfigurationAdapter' => '/configurators/LoggerConfigurationAdapter.php', + 'LoggerConfigurationAdapterINI' => '/configurators/LoggerConfigurationAdapterINI.php', + 'LoggerConfigurationAdapterPHP' => '/configurators/LoggerConfigurationAdapterPHP.php', + 'LoggerConfigurationAdapterXML' => '/configurators/LoggerConfigurationAdapterXML.php', + 'LoggerConfiguratorDefault' => '/configurators/LoggerConfiguratorDefault.php', + + // Filters + 'LoggerFilterDenyAll' => '/filters/LoggerFilterDenyAll.php', + 'LoggerFilterLevelMatch' => '/filters/LoggerFilterLevelMatch.php', + 'LoggerFilterLevelRange' => '/filters/LoggerFilterLevelRange.php', + 'LoggerFilterStringMatch' => '/filters/LoggerFilterStringMatch.php', + + // Helpers + 'LoggerFormattingInfo' => '/helpers/LoggerFormattingInfo.php', + 'LoggerMailerInterface' => '/helpers/LoggerMailerInterface.php', + 'LoggerMailerPHP' => '/helpers/LoggerMailerPHP.php', + 'LoggerOptionConverter' => '/helpers/LoggerOptionConverter.php', + 'LoggerPatternParser' => '/helpers/LoggerPatternParser.php', + 'LoggerUtils' => '/helpers/LoggerUtils.php', + + // Pattern converters + 'LoggerPatternConverter' => '/pattern/LoggerPatternConverter.php', + 'LoggerPatternConverterClass' => '/pattern/LoggerPatternConverterClass.php', + 'LoggerPatternConverterCookie' => '/pattern/LoggerPatternConverterCookie.php', + 'LoggerPatternConverterDate' => '/pattern/LoggerPatternConverterDate.php', + 'LoggerPatternConverterEnvironment' => '/pattern/LoggerPatternConverterEnvironment.php', + 'LoggerPatternConverterFile' => '/pattern/LoggerPatternConverterFile.php', + 'LoggerPatternConverterLevel' => '/pattern/LoggerPatternConverterLevel.php', + 'LoggerPatternConverterLine' => '/pattern/LoggerPatternConverterLine.php', + 'LoggerPatternConverterLiteral' => '/pattern/LoggerPatternConverterLiteral.php', + 'LoggerPatternConverterLocation' => '/pattern/LoggerPatternConverterLocation.php', + 'LoggerPatternConverterLogger' => '/pattern/LoggerPatternConverterLogger.php', + 'LoggerPatternConverterMDC' => '/pattern/LoggerPatternConverterMDC.php', + 'LoggerPatternConverterMessage' => '/pattern/LoggerPatternConverterMessage.php', + 'LoggerPatternConverterMethod' => '/pattern/LoggerPatternConverterMethod.php', + 'LoggerPatternConverterNDC' => '/pattern/LoggerPatternConverterNDC.php', + 'LoggerPatternConverterNewLine' => '/pattern/LoggerPatternConverterNewLine.php', + 'LoggerPatternConverterProcess' => '/pattern/LoggerPatternConverterProcess.php', + 'LoggerPatternConverterRelative' => '/pattern/LoggerPatternConverterRelative.php', + 'LoggerPatternConverterRequest' => '/pattern/LoggerPatternConverterRequest.php', + 'LoggerPatternConverterServer' => '/pattern/LoggerPatternConverterServer.php', + 'LoggerPatternConverterSession' => '/pattern/LoggerPatternConverterSession.php', + 'LoggerPatternConverterSessionID' => '/pattern/LoggerPatternConverterSessionID.php', + 'LoggerPatternConverterSuperglobal' => '/pattern/LoggerPatternConverterSuperglobal.php', + 'LoggerPatternConverterThrowable' => '/pattern/LoggerPatternConverterThrowable.php', + + // Layouts 'LoggerLayoutGelf' => '/layouts/LoggerLayoutGelf.php', - 'LoggerLayoutHtml' => '/layouts/LoggerLayoutHtml.php', - 'LoggerLayoutPattern' => '/layouts/LoggerLayoutPattern.php', - 'LoggerLayoutSerialized' => '/layouts/LoggerLayoutSerialized.php', - 'LoggerLayoutSimple' => '/layouts/LoggerLayoutSimple.php', - 'LoggerLayoutTTCC' => '/layouts/LoggerLayoutTTCC.php', - 'LoggerLayoutXml' => '/layouts/LoggerLayoutXml.php', - - // Renderers - 'LoggerRendererDefault' => '/renderers/LoggerRendererDefault.php', - 'LoggerRendererException' => '/renderers/LoggerRendererException.php', - 'LoggerRendererMap' => '/renderers/LoggerRendererMap.php', - 'LoggerRenderer' => '/renderers/LoggerRenderer.php', - ); - - /** - * Loads a class. - * @param string $className The name of the class to load. - */ - public static function autoload($className) { - if(isset(self::$classes[$className])) { - include dirname(__FILE__) . self::$classes[$className]; - } - } -} + 'LoggerLayoutHtml' => '/layouts/LoggerLayoutHtml.php', + 'LoggerLayoutPattern' => '/layouts/LoggerLayoutPattern.php', + 'LoggerLayoutSerialized' => '/layouts/LoggerLayoutSerialized.php', + 'LoggerLayoutSimple' => '/layouts/LoggerLayoutSimple.php', + 'LoggerLayoutTTCC' => '/layouts/LoggerLayoutTTCC.php', + 'LoggerLayoutXml' => '/layouts/LoggerLayoutXml.php', + + // Renderers + 'LoggerRendererDefault' => '/renderers/LoggerRendererDefault.php', + 'LoggerRendererException' => '/renderers/LoggerRendererException.php', + 'LoggerRendererMap' => '/renderers/LoggerRendererMap.php', + 'LoggerRenderer' => '/renderers/LoggerRenderer.php', + ); + + /** + * Loads a class. + * @param string $className The name of the class to load. + */ + public static function autoload($className) { + if(isset(self::$classes[$className])) { + include dirname(__FILE__) . self::$classes[$className]; + } + } +} http://git-wip-us.apache.org/repos/asf/logging-log4php/blob/ad8995b1/src/main/php/appenders/LoggerAppenderMail.php ---------------------------------------------------------------------- diff --git a/src/main/php/appenders/LoggerAppenderMail.php b/src/main/php/appenders/LoggerAppenderMail.php index c93f518..00ec22e 100644 --- a/src/main/php/appenders/LoggerAppenderMail.php +++ b/src/main/php/appenders/LoggerAppenderMail.php @@ -19,22 +19,22 @@ /** * LoggerAppenderMail appends log events via email. * - * This appender does not send individual emails for each logging requests but - * will collect them in a buffer and send them all in a single email once the - * appender is closed (i.e. when the script exists). Because of this, it may - * not appropriate for long running scripts, in which case + * This appender does not send individual emails for each logging requests but + * will collect them in a buffer and send them all in a single email once the + * appender is closed (i.e. when the script exists). Because of this, it may + * not appropriate for long running scripts, in which case * LoggerAppenderMailEvent might be a better choice. - * + * * This appender uses a layout. - * + * * ## Configurable parameters: ## - * - * - **to** - Email address(es) to which the log will be sent. Multiple email + * + * - **to** - Email address(es) to which the log will be sent. Multiple email * addresses may be specified by separating them with a comma. * - **from** - Email address which will be used in the From field. * - **subject** - Subject of the email message. * - **bufferSize** - Output buffer size. Number of messages sent together. - * + * * @package log4php * @subpackage appenders * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 @@ -42,30 +42,30 @@ */ class LoggerAppenderMail extends LoggerAppender { - /** + /** * Email address to put in From field of the email. * @var string */ protected $from; - /** + /** * The subject of the email. * @var string */ protected $subject = 'Log4php Report'; - + /** - * One or more comma separated email addresses to which to send the email. + * One or more comma separated email addresses to which to send the email. * @var string */ protected $to; - /** - * Buffer which holds the email contents before it is sent. - * @var string + /** + * Buffer which holds the email contents before it is sent. + * @var string */ protected $body = ''; - + /** * Output buffer size. Number of meessages kept in buffer before sending. * @var integer @@ -78,6 +78,12 @@ class LoggerAppenderMail extends LoggerAppender { */ protected $bufferCount = 0; + /** + * Class used to send emails. + * @var LoggerMailerInterface + */ + protected $mailer; + public function append(LoggerLoggingEvent $event) { $this->body .= $this->layout->format($event); $this->bufferCount += 1; @@ -97,8 +103,11 @@ class LoggerAppenderMail extends LoggerAppender { $this->closed = true; return; } + if (empty($this->mailer)) { + $this->mailer = new LoggerMailerPHP(); + } } - + public function close() { if(!$this->closed) { if(!empty($this->body)) { @@ -115,7 +124,7 @@ class LoggerAppenderMail extends LoggerAppender { $headers = "From: {$this->from}\r\n"; $headers .= "Content-Type: {$contentType}\r\n"; - $success = mail($this->to, $this->subject, $message, $headers); + $success = $this->mailer->send($this->to, $this->subject, $message, $headers); if ($success === false) { $this->warn("Failed sending email. Please check your php.ini settings. Closing appender."); $this->closed = true; @@ -124,22 +133,22 @@ class LoggerAppenderMail extends LoggerAppender { $this->bufferCount = 0; $this->body = ''; } - + /** Sets the 'subject' parameter. */ public function setSubject($subject) { $this->setString('subject', $subject); } - + /** Returns the 'subject' parameter. */ public function getSubject() { return $this->subject; } - + /** Sets the 'to' parameter. */ public function setTo($to) { $this->setString('to', $to); } - + /** Returns the 'to' parameter. */ public function getTo() { return $this->to; @@ -149,7 +158,7 @@ class LoggerAppenderMail extends LoggerAppender { public function setFrom($from) { $this->setString('from', $from); } - + /** Returns the 'from' parameter. */ public function getFrom() { return $this->from; @@ -164,4 +173,14 @@ class LoggerAppenderMail extends LoggerAppender { public function getBufferSize() { return $this->bufferSize; } + + /** Sets the 'bufferSize' parameter. */ + public function setMailer(LoggerMailerInterface $mailer) { + $this->mailer = $mailer; + } + + /** Returns the 'mailer' parameter. */ + public function getMailer() { + return $this->mailer; + } } http://git-wip-us.apache.org/repos/asf/logging-log4php/blob/ad8995b1/src/main/php/helpers/LoggerMailerInterface.php ---------------------------------------------------------------------- diff --git a/src/main/php/helpers/LoggerMailerInterface.php b/src/main/php/helpers/LoggerMailerInterface.php new file mode 100644 index 0000000..b5bb002 --- /dev/null +++ b/src/main/php/helpers/LoggerMailerInterface.php @@ -0,0 +1,32 @@ +<?php +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @package log4php + */ + +/** + * Interface for a mail sending class. + * + * @package log4php + * @subpackage helpers + * @since 2.4.0 + */ +interface LoggerMailerInterface { + + public function send($to, $subject, $message, $headers = ""); + +} http://git-wip-us.apache.org/repos/asf/logging-log4php/blob/ad8995b1/src/main/php/helpers/LoggerMailerPHP.php ---------------------------------------------------------------------- diff --git a/src/main/php/helpers/LoggerMailerPHP.php b/src/main/php/helpers/LoggerMailerPHP.php new file mode 100644 index 0000000..1d35587 --- /dev/null +++ b/src/main/php/helpers/LoggerMailerPHP.php @@ -0,0 +1,34 @@ +<?php +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * @package log4php + */ + +/** + * A mailer which uses mail() to dispatch emails. + * + * @package log4php + * @subpackage helpers + * @since 2.4.0 + */ +class LoggerMailerPHP implements LoggerMailerInterface { + + public function send($to, $subject, $message, $headers = "") { + + return mail($to, $subject, $message, $headers); + } +} http://git-wip-us.apache.org/repos/asf/logging-log4php/blob/ad8995b1/src/test/php/appenders/LoggerAppenderMailTest.php ---------------------------------------------------------------------- diff --git a/src/test/php/appenders/LoggerAppenderMailTest.php b/src/test/php/appenders/LoggerAppenderMailTest.php index a949258..bcdfcec 100644 --- a/src/test/php/appenders/LoggerAppenderMailTest.php +++ b/src/test/php/appenders/LoggerAppenderMailTest.php @@ -22,6 +22,26 @@ * @link http://logging.apache.org/log4php */ +/** A mock mailer class which always reports success. */ +class LoggerMailerMockSuccess implements LoggerMailerInterface { + + /** Counts how many times send was called. */ + public $count = 0; + + public function send($to, $subject, $message, $headers = "") { + $this->count++; + return true; + } +} + +/** A mock mailer class which always reports failure. */ +class LoggerMailerMockFailure implements LoggerMailerInterface { + + public function send($to, $subject, $message, $headers = "") { + return false; + } +} + /** * @group appenders */ @@ -32,11 +52,50 @@ class LoggerAppenderMailTest extends PHPUnit_Framework_TestCase { self::assertTrue($appender->requiresLayout()); } + /** For greater coverge! */ + public function testAccessors() { + + $buffer = 10; + $from = 'log4php@localhost'; + $mailer = new LoggerMailerPHP(); + $subject = "Subject"; + $to = 'log4php@target'; + + $appender = new LoggerAppenderMail("testAppender"); + $appender->setBufferSize($buffer); + $appender->setFrom($from); + $appender->setMailer($mailer); + $appender->setSubject($subject); + $appender->setTo($to); + $appender->activateOptions(); + + $this->assertSame($buffer, $appender->getBufferSize()); + $this->assertSame($from, $appender->getFrom()); + $this->assertSame($mailer, $appender->getMailer()); + $this->assertSame($subject, $appender->getSubject()); + $this->assertSame($to, $appender->getTo()); + } + + public function testDefaultMailer() { + + $appender = new LoggerAppenderMail("testAppender"); + $appender->setTo('[email protected]'); + $appender->setFrom('log4php@localhost'); + $appender->activateOptions(); + + $this->assertInstanceOf('LoggerMailerInterface', $appender->getMailer()); + } + public function testMail() { + $mockMailer = new LoggerMailerMockSuccess(); + + $this->assertSame(0, $mockMailer->count); + $appender = new LoggerAppenderMail("testAppender"); $appender->setTo('[email protected]'); $appender->setFrom('log4php@localhost'); $appender->setSubject("Testing text/plain " . date('Y-m-d H:i:s')); + $appender->setMailer($mockMailer); $appender->activateOptions(); $appender->append(LoggerTestHelper::getTraceEvent('tracing')); @@ -45,15 +104,57 @@ class LoggerAppenderMailTest extends PHPUnit_Framework_TestCase { $appender->append(LoggerTestHelper::getWarnEvent('warning')); $appender->append(LoggerTestHelper::getErrorEvent('erring')); $appender->append(LoggerTestHelper::getFatalEvent('fatality!')); + + $this->assertSame(0, $mockMailer->count); $appender->close(); + $this->assertSame(1, $mockMailer->count); + } + + public function testMailBuffered() { + $mockMailer = new LoggerMailerMockSuccess(); + + $appender = new LoggerAppenderMail("testAppender"); + $appender->setTo('[email protected]'); + $appender->setFrom('log4php@localhost'); + $appender->setSubject("Testing text/plain " . date('Y-m-d H:i:s')); + $appender->setBufferSize(4); + $appender->setMailer($mockMailer); + $appender->activateOptions(); + + // Buffer should be cleared after 4 log messages + + $this->assertSame(0, $mockMailer->count); + + $appender->append(LoggerTestHelper::getTraceEvent('tracing')); + $appender->append(LoggerTestHelper::getDebugEvent('debugging')); + $appender->append(LoggerTestHelper::getInfoEvent('informing')); + + $this->assertSame(0, $mockMailer->count); + + $appender->append(LoggerTestHelper::getWarnEvent('warning')); + $appender->append(LoggerTestHelper::getErrorEvent('erring')); + + $this->assertSame(1, $mockMailer->count); + + $appender->append(LoggerTestHelper::getFatalEvent('fatality!')); + + $this->assertSame(1, $mockMailer->count); + + // Close should send the remaining messages in buffer + $appender->close(); + + $this->assertSame(2, $mockMailer->count); } public function testMailHTML() { + $mockMailer = new LoggerMailerMockSuccess(); + $appender = new LoggerAppenderMail("testAppender"); $appender->setLayout(new LoggerLayoutHtml()); $appender->setTo('[email protected]'); $appender->setFrom('log4php@localhost'); $appender->setSubject("Testing text/html " . date('Y-m-d H:i:s')); + $appender->setMailer($mockMailer); $appender->activateOptions(); $appender->append(LoggerTestHelper::getTraceEvent('tracing')); @@ -67,6 +168,24 @@ class LoggerAppenderMailTest extends PHPUnit_Framework_TestCase { /** * @expectedException PHPUnit_Framework_Error + * @expectedExceptionMessage Failed sending email. Please check your php.ini settings. Closing appender. + */ + public function testMailerError() { + $mockMailer = new LoggerMailerMockFailure(); + + $appender = new LoggerAppenderMail("testAppender"); + $appender->setLayout(new LoggerLayoutHtml()); + $appender->setTo('[email protected]'); + $appender->setFrom('log4php@localhost'); + $appender->setSubject("Testing text/html " . date('Y-m-d H:i:s')); + $appender->setMailer($mockMailer); + $appender->activateOptions(); + + $appender->append(LoggerTestHelper::getTraceEvent('tracing')); + } + + /** + * @expectedException PHPUnit_Framework_Error * @expectedExceptionMessage Required parameter 'to' not set. */ public function testErrorMissingTo() {
