Kaynağa Gözat

Add BLAT log level and test the logger class.

Chris McDonough 17 yıl önce
ebeveyn
işleme
9695e2b826
2 değiştirilmiş dosya ile 95 ekleme ve 4 silme
  1. 12 4
      src/supervisor/loggers.py
  2. 83 0
      src/supervisor/tests/test_loggers.py

+ 12 - 4
src/supervisor/loggers.py

@@ -33,7 +33,8 @@ class LevelsByName:
     WARN = 30   # messages that indicate issues which aren't errors
     INFO = 20   # normal informational output
     DEBG = 10   # messages useful for users trying to debug configurations
-    TRAC = 5    # messages useful for developers trying to debug supervisor
+    TRAC = 5    # messages useful to developers trying to debug plugins
+    BLAT = 3    # messages useful for developers trying to debug supervisor
 
 class LevelsByDescription:
     critical = LevelsByName.CRIT
@@ -42,6 +43,7 @@ class LevelsByDescription:
     info = LevelsByName.INFO
     debug = LevelsByName.DEBG
     trace = LevelsByName.TRAC
+    blather = LevelsByName.BLAT
 
 def _levelNumbers():
     bynumber = {}
@@ -235,11 +237,17 @@ class LogRecord:
 
 class Logger:
     def __init__(self, level=None, handlers=None):
+        if level is None:
+            level = LevelsByName.INFO
         self.level = level
+
         if handlers is None:
-            self.handlers = []
-        else:
-            self.handlers = handlers
+            handlers = []
+        self.handlers = handlers
+
+    def blather(self, msg, **kw):
+        if LevelsByName.BLAT >= self.level:
+            self.log(LevelsByName.BLAT, msg, **kw)
 
     def trace(self, msg, **kw):
         if LevelsByName.TRAC >= self.level:

+ 83 - 0
src/supervisor/tests/test_loggers.py

@@ -195,6 +195,89 @@ class BoundIOTests(unittest.TestCase):
         io.close()
         self.assertEqual(io.buf, '')
 
+class LoggerTests(unittest.TestCase):
+    def _getTargetClass(self):
+        from supervisor.loggers import Logger
+        return Logger
+
+    def _makeOne(self, level=None, handlers=None):
+        klass = self._getTargetClass()
+        return klass(level, handlers)
+
+    def test_blather(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.BLAT)
+        logger = self._makeOne(LevelsByName.BLAT, (handler,))
+        logger.blather('hello')
+        self.assertEqual(len(handler.records), 1)
+        logger.level = LevelsByName.TRAC
+        logger.blather('hello')
+        self.assertEqual(len(handler.records), 1)
+
+    def test_trace(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.TRAC)
+        logger = self._makeOne(LevelsByName.TRAC, (handler,))
+        logger.trace('hello')
+        self.assertEqual(len(handler.records), 1)
+        logger.level = LevelsByName.DEBG
+        logger.trace('hello')
+        self.assertEqual(len(handler.records), 1)
+        
+    def test_debug(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.DEBG)
+        logger = self._makeOne(LevelsByName.DEBG, (handler,))
+        logger.debug('hello')
+        self.assertEqual(len(handler.records), 1)
+        logger.level = LevelsByName.INFO
+        logger.debug('hello')
+        self.assertEqual(len(handler.records), 1)
+
+    def test_info(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.INFO)
+        logger = self._makeOne(LevelsByName.INFO, (handler,))
+        logger.info('hello')
+        self.assertEqual(len(handler.records), 1)
+        logger.level = LevelsByName.WARN
+        logger.info('hello')
+        self.assertEqual(len(handler.records), 1)
+
+    def test_warn(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.WARN)
+        logger = self._makeOne(LevelsByName.WARN, (handler,))
+        logger.warn('hello')
+        self.assertEqual(len(handler.records), 1)
+        logger.level = LevelsByName.ERRO
+        logger.warn('hello')
+        self.assertEqual(len(handler.records), 1)
+
+    def test_error(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.ERRO)
+        logger = self._makeOne(LevelsByName.ERRO, (handler,))
+        logger.error('hello')
+        self.assertEqual(len(handler.records), 1)
+        logger.level = LevelsByName.CRIT
+        logger.error('hello')
+        self.assertEqual(len(handler.records), 1)
+
+    def test_critical(self):
+        from supervisor.loggers import LevelsByName
+        handler = DummyHandler(LevelsByName.CRIT)
+        logger = self._makeOne(LevelsByName.CRIT, (handler,))
+        logger.critical('hello')
+        self.assertEqual(len(handler.records), 1)
+
+class DummyHandler:
+    def __init__(self, level):
+        self.level = level
+        self.records = []
+    def emit(self, record):
+        self.records.append(record)
+
 def test_suite():
     return unittest.findTestCases(sys.modules[__name__])