LoggerLayoutPattern:
authorIvan Habunek <ihabunek@apache.org>
Mon, 8 Oct 2012 08:48:03 +0000 (08:48 +0000)
committerIvan Habunek <ihabunek@apache.org>
Mon, 8 Oct 2012 08:48:03 +0000 (08:48 +0000)
- greatly simplified rendering of exceptions
- added %exception specifier, along with %ex and %throwable
- more tests

git-svn-id: https://svn.apache.org/repos/asf/logging/log4php/trunk@1395470 13f79535-47bb-0310-9956-ffa450edef68

src/main/php/layouts/LoggerLayoutPattern.php
src/main/php/pattern/LoggerPatternConverterThrowable.php
src/test/php/pattern/LoggerPatternConverterTest.php

index f3e0fd9..0467d18 100644 (file)
@@ -59,6 +59,7 @@ class LoggerLayoutPattern extends LoggerLayout {
                'env' => 'LoggerPatternConverterEnvironment',
                
                'ex' => 'LoggerPatternConverterThrowable',
+               'exception' => 'LoggerPatternConverterThrowable',
                'throwable' => 'LoggerPatternConverterThrowable',
                
                'F' => 'LoggerPatternConverterFile',
index 01b79f7..609836a 100644 (file)
 /**\r
  * Returns the throwable information linked to the logging event, if any.\r
  * \r
- * Option: the maximum stack trace lines to return (returns all if not set)\r
- * \r
  * @package log4php\r
  * @subpackage pattern\r
  * @version $Revision$\r
  * @since 2.3\r
  */\r
 class LoggerPatternConverterThrowable extends LoggerPatternConverter {\r
-       \r
-       private $depth;\r
-       \r
-       public function activateOptions() {\r
-               if (isset($this->option) && is_numeric($op) && $op >= 0) {\r
-                       $this->depth = (integer) $this->option;\r
-               }\r
-       }\r
-       \r
+\r
        public function convert(LoggerLoggingEvent $event) {\r
-               \r
                $info = $event->getThrowableInformation();\r
-               if ($info === null) {\r
-                       return '';\r
-               }\r
-               \r
-               $ex = $info->getThrowable();\r
-               \r
-               // Format exception to string\r
-               $strEx = get_class($ex) . ': "' . $ex->getMessage() . '"' . PHP_EOL;\r
-               $strEx .= 'at '. $ex->getFile() . ':' . $ex->getLine();\r
-               \r
-               // Add trace if required\r
-               if ($this->depth === null || $this->depth > 0) {\r
-                       $trace = $ex->getTrace();\r
-                       foreach($trace as $key => $item) {\r
-                               if (isset($this->depth) && $key > $this->depth) {\r
-                                       break;\r
-                               }\r
-                               $strEx .= PHP_EOL . "#$key " . \r
-                                       "{$item['file']}:{$item['line']} " .\r
-                                       "in {$item['class']}{$item['type']}{$item['function']}()"; \r
-                       }\r
+               if (isset($info)) {\r
+                       $ex = $info->getThrowable();\r
+                       return (string) $ex . PHP_EOL;\r
                }\r
-               \r
-               return $strEx;\r
+               return '';\r
        }\r
 }\r
  
\ No newline at end of file
index daad2e1..12ab854 100644 (file)
@@ -17,7 +17,7 @@
  *\r
  * @category   tests\r
  * @package    log4php\r
- * @subpackage filters\r
+ * @subpackage pattern\r
  * @license    http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0\r
  * @version    $Revision$\r
  * @link       http://logging.apache.org/log4php\r
@@ -173,6 +173,28 @@ class LoggerPatternConverterTest extends PHPUnit_Framework_TestCase {
 \r
                Logger::resetConfiguration();\r
        }\r
+       \r
+       public function testLocation2() {\r
+               $config = LoggerTestHelper::getEchoPatternConfig("%location");\r
+               Logger::configure($config);\r
+       \r
+               // Test by capturing output. Logging methods of a Logger object must\r
+               // be used for the location info to be formed correctly.\r
+               ob_start();\r
+               $log = Logger::getLogger('foo');\r
+               $log->info('foo'); $line = __LINE__; // Do NOT move this to next line.\r
+               $actual = ob_get_contents();\r
+               ob_end_clean();\r
+       \r
+               $class = __CLASS__;\r
+               $func = __FUNCTION__;\r
+               $file = __FILE__;\r
+               \r
+               $expected = "$class.$func($file:$line)";\r
+               self::assertSame($expected, $actual);\r
+       \r
+               Logger::resetConfiguration();\r
+       }\r
 \r
        public function testMessage() {\r
                $expected = "This is a message.";\r