Browse Source

Fix log config option in ErrorTrap not working.

Also fix a few tests that weren't really doing what they should.
Mark Story 4 years ago
parent
commit
4e2c894a10
2 changed files with 29 additions and 6 deletions
  1. 4 1
      src/Error/ErrorTrap.php
  2. 25 5
      tests/TestCase/Error/ErrorTrapTest.php

+ 4 - 1
src/Error/ErrorTrap.php

@@ -125,13 +125,16 @@ class ErrorTrap
 
         try {
             // Log first incase rendering or event listeners fail
-            $logger->logMessage($error->getLabel(), $error->getMessage());
+            if ($this->_config['log']) {
+                $logger->logMessage($error->getLabel(), $error->getMessage());
+            }
             $event = $this->dispatchEvent('Error.beforeRender', ['error' => $error]);
             if ($event->isStopped()) {
                 return true;
             }
             $renderer->write($renderer->render($error, $debug));
         } catch (Exception $e) {
+            // Fatal errors always log.
             $logger->logMessage('error', 'Could not render error. Got: ' . $e->getMessage());
 
             return false;

+ 25 - 5
tests/TestCase/Error/ErrorTrapTest.php

@@ -115,17 +115,16 @@ class ErrorTrapTest extends TestCase
     {
         return [
             // PHP error level, expected log level
-            [E_USER_ERROR, 'error'],
             [E_USER_WARNING, 'warning'],
-            [E_USER_NOTICE, 'info'],
-            [E_USER_DEPRECATED, 'info'],
+            [E_USER_NOTICE, 'notice'],
+            [E_USER_DEPRECATED, 'notice'],
         ];
     }
 
     /**
      * @dataProvider logLevelProvider
      */
-    public function testLoggingLevel($level, $logLevel)
+    public function testHandleErrorLoggingLevel($level, $logLevel)
     {
         Log::setConfig('test_error', [
             'className' => 'Array',
@@ -136,12 +135,33 @@ class ErrorTrapTest extends TestCase
         $trap->register();
 
         ob_start();
-        trigger_error('Oh no it was bad', E_USER_NOTICE);
+        trigger_error('Oh no it was bad', $level);
         ob_get_clean();
         restore_error_handler();
 
         $logs = Log::engine('test_error')->read();
         $this->assertStringContainsString('Oh no it was bad', $logs[0]);
+        $this->assertStringContainsString($logLevel, $logs[0]);
+    }
+
+    public function testHandleErrorNoLog()
+    {
+        Log::setConfig('test_error', [
+            'className' => 'Array',
+        ]);
+        $trap = new ErrorTrap([
+            'log' => false,
+            'errorRenderer' => TextErrorRenderer::class,
+        ]);
+        $trap->register();
+
+        ob_start();
+        trigger_error('Oh no it was bad', E_USER_WARNING);
+        ob_get_clean();
+        restore_error_handler();
+
+        $logs = Log::engine('test_error')->read();
+        $this->assertEmpty($logs);
     }
 
     public function testRegisterNoOutputDebug()