[svn] commit: r2617 - in /branches/trac267/src/lib/python/isc/log: log.py tests/log_test.py

BIND 10 source code commits bind10-changes at lists.isc.org
Tue Aug 3 00:00:03 UTC 2010


Author: jinmei
Date: Tue Aug  3 00:00:02 2010
New Revision: 2617

Log:
applied proposed patch

Modified:
    branches/trac267/src/lib/python/isc/log/log.py
    branches/trac267/src/lib/python/isc/log/tests/log_test.py

Modified: branches/trac267/src/lib/python/isc/log/log.py
==============================================================================
--- branches/trac267/src/lib/python/isc/log/log.py (original)
+++ branches/trac267/src/lib/python/isc/log/log.py Tue Aug  3 00:00:02 2010
@@ -19,6 +19,7 @@
 To use, simply 'import isc.log.log' and log away!
 """
 import os
+import sys
 import syslog
 import logging
 import logging.handlers
@@ -31,10 +32,13 @@
           'error' : logging.ERROR,
           'critical' : logging.CRITICAL}
 
-
 FORMATTER = logging.Formatter("%(name)s: %(levelname)s: %(message)s")
 TIME_FORMATTER = logging.Formatter("%(asctime)s.%(msecs)03d %(name)s: %(levelname)s: %(message)s",
                                    "%d-%b-%Y %H:%M:%S")
+
+def log_err(err_type, err_msg):
+    sys.stderr.write(err_type + ": " + "%s.\n" % str(err_msg)[str(err_msg).find(']')+1:])
+
 
 class NSFileLogHandler(logging.handlers.RotatingFileHandler):
     """RotatingFileHandler: replace RotatingFileHandler with a custom handler"""
@@ -45,15 +49,20 @@
             os.makedirs(dir[0])
         super(NSFileLogHandler, self).__init__(filename, mode, maxBytes,
                                                 backupCount, encoding, delay)
+    def handleError(self, record):
+        if logging.raiseExceptions:
+            ei = sys.exc_info()
+            log_err("[b10-logging] Update logging config fail", str(ei[1]))
 
     def shouldRollover(self, record):
         """Rewrite RotatingFileHandler.shouldRollover. 
        
         If the log file is deleted at runtime, a new file will be created.
         """
-        dfn = self.baseFilename                 
+        dfn = self.baseFilename
         if (self.stream) and (not os.path.exists(dfn)): #Does log file exist?
             self.stream.close()
+            self.stream = None
             dir = os.path.split(dfn)
             if not (os.path.exists(dir[0])): #Does log subdirectory exist?
                 os.makedirs(dir[0])
@@ -63,15 +72,12 @@
     def update_config(self, file_name, backup_count, max_bytes):
         """Update RotatingFileHandler configuration.
 
-        If the file path does not exist, we will use the old log file.
         input:
             log file name
             max backup count
             predetermined log file size
         """
-        dir = os.path.split(file_name)
-        if (os.path.exists(dir[0])):
-            self.baseFilename = file_name
+        self.baseFilename = file_name
         self.maxBytes = max_bytes
         self.backupCount = backup_count
 
@@ -162,8 +168,9 @@
             try:
                 self._file_handler = NSFileLogHandler(filename = log_file,
                                           maxBytes = max_bytes, backupCount = backup_count)
-            except IOError:
+            except (IOError, OSError) as e:
                 self._file_handler = None
+                log_err("[b10-logging] Add file handler fail", str(e))
                 return
             self._file_handler.setFormatter(TIME_FORMATTER)
             self.addHandler(self._file_handler)
@@ -244,6 +251,9 @@
         logger.log_message('info', "We have a %s", "mysterious problem").
         """
         logLevel = LEVELS.get(level, logging.NOTSET)
-        self.log(logLevel, msg, *args, **kwargs)
-
-
+        try:
+            self.log(logLevel, msg, *args, **kwargs)
+        except Exception as e:
+            log_err("[b10-logging] Log message fail", str(e))
+
+

Modified: branches/trac267/src/lib/python/isc/log/tests/log_test.py
==============================================================================
--- branches/trac267/src/lib/python/isc/log/tests/log_test.py (original)
+++ branches/trac267/src/lib/python/isc/log/tests/log_test.py Tue Aug  3 00:00:02 2010
@@ -1,6 +1,7 @@
 from isc.log.log import *
 import unittest
 import os
+import sys
 import tempfile
 
 
@@ -19,6 +20,8 @@
         self.handler = NSFileLogHandler(filename = self.FILE_LOG1.name, 
                                         maxBytes = 1024, 
                                         backupCount = 5)
+        self.stderr_bak = sys.stderr
+        sys.stderr = open(os.devnull, 'w')
 
     def test_shouldRollover(self):
         if(os.path.exists(self.FILE_LOG1.name)):
@@ -33,15 +36,12 @@
         self.assertEqual(self.handler.maxBytes, 512)
         self.assertEqual(self.handler.backupCount, 3)
 
-        dir = os.path.split(self.FILE_LOG3.name)                                        
-        path = dir[0] + "path_not_exists"
-        update_file = os.path.join(path, dir[1])
-
-        if not os.path.exists(path):
-            self.handler.update_config(update_file, 4, 1024)
-            self.assertEqual(self.handler.baseFilename, self.FILE_LOG2.name)
-            self.assertEqual(self.handler.maxBytes, 1024)
-            self.assertEqual(self.handler.backupCount, 4)
+    def test_handle_Error(self):
+        record = logging.LogRecord(None, None, "", 0, "rotate file handler", (), None, None)
+        logging.raiseExceptions = 0
+        self.handler.handleError(record)
+        logging.raiseExceptions = 1
+        self.handler.handleError(record)
 
     def tearDown(self):
         self.handler.flush()
@@ -49,6 +49,9 @@
         self.FILE_LOG1.close()
         self.FILE_LOG2.close()
         self.FILE_LOG3.close()
+        sys.stderr.flush()
+        sys.stderr = self.stderr_bak
+
 
 class TestSysLogHandler(unittest.TestCase):
     def setUp(self):
@@ -79,6 +82,8 @@
                                            self.FILE_STREAM_LOG1.name,
                                            'debug', 5, 1024, True)
         self.syslog_logger = NSLogger('SysLogger', '', 'info', 5, 1024, False)
+        self.stderr_bak = sys.stderr
+        sys.stderr = open(os.devnull, 'w')
     
     def test_logging_init(self):
         self.assertNotEqual(self.file_stream_logger._file_handler, None)
@@ -118,6 +123,10 @@
         self.syslog_logger._add_rotate_handler(self.FILE_STREAM_LOG1.name, 5, 1024)
         ret = self.syslog_logger._file_handler in self.syslog_logger.handlers
         self.assertTrue(ret)
+
+        self.syslog_logger.removeHandler(self.syslog_logger._file_handler)
+        log_file = self.FILE_STREAM_LOG1.name + '/logfile'
+        self.syslog_logger._add_rotate_handler(log_file, 5, 1024)
 
     def test_add_stream_handler(self):
         if(self.file_stream_logger._stream_handler in self.file_stream_logger.handlers):
@@ -164,15 +173,18 @@
                          'log_max_bytes' : 1024}
         self.file_stream_logger.update_config(update_config)
         self.file_stream_logger.log_message('debug', 'debug message')
-        self.file_stream_logger.log_message('info', 'info message')
         self.file_stream_logger.log_message('warning', 'warning message')
         self.file_stream_logger.log_message('error', 'error message')
+        self.file_stream_logger.log_message('not-exist', 'not exist message')
+        self.file_stream_logger.log_message('critical', 'critical message', extra=['message', 'asctime'])
         self.assertTrue(os.path.exists(self.FILE_STREAM_LOG3.name))
     
     def tearDown(self):
         self.FILE_STREAM_LOG1.close()
         self.FILE_STREAM_LOG2.close()
         self.FILE_STREAM_LOG3.close()
+        sys.stderr.flush();
+        sys.stderr = self.stderr_bak
 
 if __name__ == '__main__':
     unittest.main()




More information about the bind10-changes mailing list