[svn] commit: r2575 - in /branches/trac176/src: bin/xfrout/xfrout.py.in lib/python/isc/log/log.py lib/python/isc/log/tests/log_test.py
BIND 10 source code commits
bind10-changes at lists.isc.org
Thu Jul 22 06:04:12 UTC 2010
Author: chenzhengzhang
Date: Thu Jul 22 06:04:11 2010
New Revision: 2575
Log:
fix log Makedirs exception bug
Modified:
branches/trac176/src/bin/xfrout/xfrout.py.in
branches/trac176/src/lib/python/isc/log/log.py
branches/trac176/src/lib/python/isc/log/tests/log_test.py
Modified: branches/trac176/src/bin/xfrout/xfrout.py.in
==============================================================================
--- branches/trac176/src/bin/xfrout/xfrout.py.in (original)
+++ branches/trac176/src/bin/xfrout/xfrout.py.in Thu Jul 22 06:04:11 2010
@@ -52,8 +52,8 @@
class XfroutSession(BaseRequestHandler):
def __init__(self, request, client_address, server, log):
+ self._log = log
BaseRequestHandler.__init__(self, request, client_address, server)
- self._log = log
def handle(self):
fd = recv_fd(self.request.fileno())
Modified: branches/trac176/src/lib/python/isc/log/log.py
==============================================================================
--- branches/trac176/src/lib/python/isc/log/log.py (original)
+++ branches/trac176/src/lib/python/isc/log/log.py Thu Jul 22 06:04:11 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,6 +49,10 @@
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.
@@ -54,6 +62,7 @@
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/trac176/src/lib/python/isc/log/tests/log_test.py
==============================================================================
--- branches/trac176/src/lib/python/isc/log/tests/log_test.py (original)
+++ branches/trac176/src/lib/python/isc/log/tests/log_test.py Thu Jul 22 06:04:11 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