Author: tmckay
Date: 2011-04-26 17:36:58 +0000 (Tue, 26 Apr 2011)
New Revision: 4740
Modified:
trunk/parsley/python/parsley/loggingex.py
Log:
Add exception handlers in/around handler.emit() to swallow exceptions.
Ultimate failure of log message results in a warning written to sys.stderr
BZ699819
Modified: trunk/parsley/python/parsley/loggingex.py
===================================================================
--- trunk/parsley/python/parsley/loggingex.py 2011-04-26 14:54:46 UTC (rev 4739)
+++ trunk/parsley/python/parsley/loggingex.py 2011-04-26 17:36:58 UTC (rev 4740)
@@ -1,5 +1,6 @@
import logging
import os
+import sys
from stat import ST_DEV, ST_INO
import traceback
@@ -62,6 +63,13 @@
return stream
def emit(self, record):
+ # Never want to crash writing out a log entry
+ try:
+ self._emit(record)
+ except:
+ sys.stderr.write("Warning, logging exception writing " +
self.baseFilename + "\n")
+
+ def _emit(self, record):
# Following snippett taken from WatchedFileHandler in Python 2.6
# Reopen the stream if the original file has been moved
if not os.path.exists(self.baseFilename):
@@ -71,8 +79,14 @@
stat = os.stat(self.baseFilename)
changed = (stat[ST_DEV] != self.dev) or (stat[ST_INO] != self.ino)
if changed and self.stream is not None:
- self.stream.flush()
- self.stream.close()
+ try:
+ self.stream.flush()
+ except:
+ pass
+ try:
+ self.stream.close()
+ except:
+ pass
self.stream = self._reopen()
if stat is None:
stat = os.stat(self.baseFilename)
Show replies by date