Jelajahi Sumber

Implement the 8 RFC3164 severity levels instead of just 6.

- constants defined for the 2 missing levels: NOTICE and EMERGENCY.
- add<level>() and <level>() convenience methods added.
- TestHandler and tests updated to account for the two extra levels.
- surjective mappings from the RFC3164 to only 6 levels changes to bijective.
- README updated accordingly.
Frederic G. MARAND 13 tahun lalu
induk
melakukan
07aac12c72

+ 11 - 7
README.mdown

@@ -47,22 +47,24 @@ will be created if you don't set one. The formatters normalize and format
 incoming records so that they can be used by the handlers to output useful
 information.
 
-Custom severity levels are not available. Only six levels (debug, info,
-warning, error, critical, alert) are present for basic filtering purposes, but
-for sorting and other use cases that would require flexibility, you should add
-Processors to the Logger that can add extra information (tags, user ip, ..) to
-the records before they are handled.
+Custom severity levels are not available. Only the eight RFC 3164 levels (debug, 
+info, notice, warning, error, critical, alert, emergency) are present for basic 
+filtering purposes, but for sorting and other use cases that would require 
+flexibility, you should add Processors to the Logger that can add extra 
+information (tags, user ip, ..) to the records before they are handled.
 
 Log Levels
 ----------
 
-Monolog exposes 6 log levels. Although it is possible to add more by extending
-the classes you need, these are generally enough.
+Monolog exposes the 8 standard RFC3164 log levels. Although it is possible to
+add more by extending the classes you need, these are generally enough.
 
 - **DEBUG** (100): Detailed debug information.
 
 - **INFO** (200): Interesting events. Examples: User logs in, SQL logs.
 
+- **NOTICE** (250): Normal but significant events.
+
 - **WARNING** (300): Exceptional occurrences that are not errors. Examples:
   Use of deprecated APIs, poor use of an API, undesirable things that are not
   necessarily wrong.
@@ -77,6 +79,8 @@ the classes you need, these are generally enough.
   down, database unavailable, etc. This should trigger the SMS alerts and wake
   you up.
 
+- **EMERGENCY** (600): Emergency: system is unusable.
+
 Docs
 ====
 

+ 8 - 6
src/Monolog/Handler/SyslogHandler.php

@@ -32,12 +32,14 @@ class SyslogHandler extends AbstractProcessingHandler
      * Translates Monolog log levels to syslog log priorities.
      */
     private $logLevels = array(
-        Logger::DEBUG    => LOG_DEBUG,
-        Logger::INFO     => LOG_INFO,
-        Logger::WARNING  => LOG_WARNING,
-        Logger::ERROR    => LOG_ERR,
-        Logger::CRITICAL => LOG_CRIT,
-        Logger::ALERT    => LOG_ALERT,
+        Logger::DEBUG     => LOG_DEBUG,
+        Logger::INFO      => LOG_INFO,
+        Logger::NOTICE    => LOG_NOTICE,
+        Logger::WARNING   => LOG_WARNING,
+        Logger::ERROR     => LOG_ERR,
+        Logger::CRITICAL  => LOG_CRIT,
+        Logger::ALERT     => LOG_ALERT,
+        Logger::EMERGENCY => LOG_EMERG,
     );
 
     /**

+ 20 - 0
src/Monolog/Handler/TestHandler.php

@@ -30,6 +30,11 @@ class TestHandler extends AbstractProcessingHandler
         return $this->records;
     }
 
+    public function hasEmergency($record)
+    {
+        return $this->hasRecord($record, Logger::EMERGENCY);
+    }
+
     public function hasAlert($record)
     {
         return $this->hasRecord($record, Logger::ALERT);
@@ -50,6 +55,11 @@ class TestHandler extends AbstractProcessingHandler
         return $this->hasRecord($record, Logger::WARNING);
     }
 
+    public function hasNotice($record)
+    {
+        return $this->hasRecord($record, Logger::NOTICE);
+    }
+
     public function hasInfo($record)
     {
         return $this->hasRecord($record, Logger::INFO);
@@ -60,6 +70,11 @@ class TestHandler extends AbstractProcessingHandler
         return $this->hasRecord($record, Logger::DEBUG);
     }
 
+    public function hasEmergencyRecords()
+    {
+        return isset($this->recordsByLevel[Logger::EMERGENCY]);
+    }
+
     public function hasAlertRecords()
     {
         return isset($this->recordsByLevel[Logger::ALERT]);
@@ -80,6 +95,11 @@ class TestHandler extends AbstractProcessingHandler
         return isset($this->recordsByLevel[Logger::WARNING]);
     }
 
+    public function hasNoticeRecords()
+    {
+        return isset($this->recordsByLevel[Logger::NOTICE]);
+    }
+
     public function hasInfoRecords()
     {
         return isset($this->recordsByLevel[Logger::INFO]);

+ 48 - 11
src/Monolog/Logger.php

@@ -36,6 +36,11 @@ class Logger
      */
     const INFO = 200;
 
+    /**
+     * Uncommon events
+     */
+    const NOTICE = 250;
+
     /**
      * Exceptional occurrences that are not errors
      *
@@ -64,13 +69,20 @@ class Logger
      */
     const ALERT = 550;
 
+    /**
+     * Urgent alert.
+     */
+    const EMERGENCY = 600;
+
     protected static $levels = array(
         100 => 'DEBUG',
         200 => 'INFO',
+        250 => 'NOTICE',
         300 => 'WARNING',
         400 => 'ERROR',
         500 => 'CRITICAL',
         550 => 'ALERT',
+        600 => 'EMERGENCY',
     );
 
     protected $name;
@@ -219,6 +231,18 @@ class Logger
         return $this->addRecord(self::INFO, $message, $context);
     }
 
+    /**
+     * Adds a log record at the NOTICE level.
+     *
+     * @param string $message The log message
+     * @param array $context The log context
+     * @return Boolean Whether the record has been processed
+     */
+    public function addNotice($message, array $context = array())
+    {
+        return $this->addRecord(self::NOTICE, $message, $context);
+    }
+
     /**
      * Adds a log record at the WARNING level.
      *
@@ -267,6 +291,19 @@ class Logger
         return $this->addRecord(self::ALERT, $message, $context);
     }
 
+    /**
+     * Adds a log record at the EMERGENCY level.
+     *
+     * @param string $message The log message
+     * @param array $context The log context
+     * @return Boolean Whether the record has been processed
+     */
+    public function addEmergency($message, array $context = array())
+    {
+      return $this->addRecord(self::EMERGENCY, $message, $context);
+    }
+
+
     /**
      * Gets the name of the logging level.
      *
@@ -310,7 +347,7 @@ class Logger
     /**
      * Adds a log record at the DEBUG level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -324,7 +361,7 @@ class Logger
     /**
      * Adds a log record at the INFO level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -338,7 +375,7 @@ class Logger
     /**
      * Adds a log record at the INFO level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -346,13 +383,13 @@ class Logger
      */
     public function notice($message, array $context = array())
     {
-        return $this->addRecord(self::INFO, $message, $context);
+        return $this->addRecord(self::NOTICE, $message, $context);
     }
 
     /**
      * Adds a log record at the WARNING level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -366,7 +403,7 @@ class Logger
     /**
      * Adds a log record at the ERROR level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -380,7 +417,7 @@ class Logger
     /**
      * Adds a log record at the CRITICAL level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -394,7 +431,7 @@ class Logger
     /**
      * Adds a log record at the ALERT level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -406,9 +443,9 @@ class Logger
     }
 
     /**
-     * Adds a log record at the ALERT level.
+     * Adds a log record at the EMERGENCY level.
      *
-     * This method allows to have an easy ZF compatibility.
+     * This method allows to have an easy ZF/Symfony 2 compatibility.
      *
      * @param string $message The log message
      * @param array $context The log context
@@ -416,6 +453,6 @@ class Logger
      */
     public function emerg($message, array $context = array())
     {
-        return $this->addRecord(self::ALERT, $message, $context);
+        return $this->addRecord(self::EMERGENCY, $message, $context);
     }
 }

+ 8 - 6
tests/Monolog/Handler/TestHandlerTest.php

@@ -43,12 +43,14 @@ class TestHandlerTest extends TestCase
     public function methodProvider()
     {
         return array(
-            array('Alert'   , Logger::ALERT),
-            array('Critical', Logger::CRITICAL),
-            array('Error'   , Logger::ERROR),
-            array('Warning' , Logger::WARNING),
-            array('Info'    , Logger::INFO),
-            array('Debug'   , Logger::DEBUG),
+            array('Emergency', Logger::EMERGENCY),
+            array('Alert'    , Logger::ALERT),
+            array('Critical' , Logger::CRITICAL),
+            array('Error'    , Logger::ERROR),
+            array('Warning'  , Logger::WARNING),
+            array('Info'     , Logger::INFO),
+            array('Notice'   , Logger::NOTICE),
+            array('Debug'    , Logger::DEBUG),
         );
     }
 }

+ 12 - 8
tests/Monolog/LoggerTest.php

@@ -319,10 +319,12 @@ class LoggerTest extends \PHPUnit_Framework_TestCase
      * @dataProvider logMethodProvider
      * @covers Monolog\Logger::addDebug
      * @covers Monolog\Logger::addInfo
+     * @covers Monolog\Logger::addNotice
      * @covers Monolog\Logger::addWarning
      * @covers Monolog\Logger::addError
      * @covers Monolog\Logger::addCritical
      * @covers Monolog\Logger::addAlert
+     * @covers Monolog\Logger::addEmergency
      * @covers Monolog\Logger::debug
      * @covers Monolog\Logger::info
      * @covers Monolog\Logger::notice
@@ -346,22 +348,24 @@ class LoggerTest extends \PHPUnit_Framework_TestCase
     {
         return array(
             // monolog methods
-            array('addDebug',    Logger::DEBUG),
-            array('addInfo',     Logger::INFO),
-            array('addWarning',  Logger::WARNING),
-            array('addError',    Logger::ERROR),
-            array('addCritical', Logger::CRITICAL),
-            array('addAlert',    Logger::ALERT),
+            array('addDebug',     Logger::DEBUG),
+            array('addInfo',      Logger::INFO),
+            array('addNotice',    Logger::NOTICE),
+            array('addWarning',   Logger::WARNING),
+            array('addError',     Logger::ERROR),
+            array('addCritical',  Logger::CRITICAL),
+            array('addAlert',     Logger::ALERT),
+            array('addEmergency', Logger::EMERGENCY),
 
             // ZF/Sf2 compat methods
             array('debug',  Logger::DEBUG),
             array('info',   Logger::INFO),
-            array('notice', Logger::INFO),
+            array('notice', Logger::NOTICE),
             array('warn',   Logger::WARNING),
             array('err',    Logger::ERROR),
             array('crit',   Logger::CRITICAL),
             array('alert',  Logger::ALERT),
-            array('emerg',  Logger::ALERT),
+            array('emerg',  Logger::EMERGENCY),
         );
     }
 }