Author: janne.t.harkonen
Date: Wed Mar 25 02:25:32 2009
New Revision: 1524

Modified:
   trunk/src/robot/output/systemlogger.py
   trunk/utest/output/test_systemlogger.py

Log:
Syslog now caches messages.
When a new logger with 'write' method is registered, these cached
messages are written to that logger.

Modified: trunk/src/robot/output/systemlogger.py
==============================================================================
--- trunk/src/robot/output/systemlogger.py      (original)
+++ trunk/src/robot/output/systemlogger.py      Wed Mar 25 02:25:32 2009
@@ -27,12 +27,16 @@
         self._writers = []
         self._output_filers = []
         self._closers = []
+        self.message_cache = []
         self.monitor = None

     def register_logger(self, *loggers):
         for logger in loggers:
             if hasattr(logger, 'write'):
                 self._writers.append(logger.write)
+                if self.message_cache:
+                    for msg in self.message_cache:
+                        logger.write(msg, msg.level)
             if hasattr(logger, 'output_file'):
                 self._output_filers.append(logger.output_file)
             if hasattr(logger, 'close'):
@@ -64,6 +68,8 @@

     def write(self, message, level='INFO'):
         msg = Message(message, level)
+        if self.message_cache is not None:
+            self.message_cache.append(msg)
         for write in self._writers:
             write(msg, level)


Modified: trunk/utest/output/test_systemlogger.py
==============================================================================
--- trunk/utest/output/test_systemlogger.py     (original)
+++ trunk/utest/output/test_systemlogger.py     Wed Mar 25 02:25:32 2009
@@ -134,6 +134,22 @@
         self.syslog.register_file_logger('None')
         assert_equals(len(self.syslog._writers), 0)

+    def test_cached_messages_are_given_to_registered_writers(self):
+        self.syslog.write('This is a cached message', 'INFO')
+        self.syslog.write('Another cached message', 'TRACE')
+        logger = LoggerMock(('This is a cached message', 'INFO'),
+                            ('Another cached message', 'TRACE'))
+        self.syslog.register_logger(logger)
+        assert_equals(logger.msg.message, 'Another cached message')
+
+    def test_message_cache_can_be_turned_off(self):
+        self.syslog.message_cache = None
+        self.syslog.write('This message is not cached', 'INFO')
+        logger = LoggerMock(('', ''))
+        self.syslog.register_logger(logger)
+        assert_false(hasattr(logger, 'msg'))
+
+


 if __name__ == "__main__":

Reply via email to