diff options
author | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2006-02-09 08:34:14 +0000 |
---|---|---|
committer | Vinay Sajip <vinay_sajip@yahoo.co.uk> | 2006-02-09 08:34:14 +0000 |
commit | 55f40411c87e3cb1564955ece5191ca876c28f3e (patch) | |
tree | 0ed71fd4d651d186787af0682fbc2ee4d4c5dad8 | |
parent | 1a15b6bafc90dc730efb217745abe532e40dae5a (diff) | |
download | cpython-55f40411c87e3cb1564955ece5191ca876c28f3e.tar.gz |
Propagate exceptions from shutdown() if raiseExceptions is not set.
Added 'extra' keyword argument handling to logging calls, as discussed on python-dev.
-rw-r--r-- | Lib/logging/__init__.py | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py index da4c1921fa..561654919c 100644 --- a/Lib/logging/__init__.py +++ b/Lib/logging/__init__.py @@ -1053,14 +1053,20 @@ class Logger(Filterer): continue return filename, f.f_lineno, co.co_name - def makeRecord(self, name, level, fn, lno, msg, args, exc_info): + def makeRecord(self, name, level, fn, lno, msg, args, exc_info, extra=None): """ A factory method which can be overridden in subclasses to create specialized LogRecords. """ - return LogRecord(name, level, fn, lno, msg, args, exc_info) + rv = LogRecord(name, level, fn, lno, msg, args, exc_info) + if extra: + for key in extra: + if (key in ["message", "asctime"]) or (key in rv.__dict__): + raise KeyError("Attempt to overwrite %r in LogRecord" % key) + rv.__dict__[key] = extra[key] + return rv - def _log(self, level, msg, args, exc_info=None): + def _log(self, level, msg, args, exc_info=None, extra=None): """ Low-level logging routine which creates a LogRecord and then calls all the handlers of this logger to handle the record. @@ -1072,7 +1078,7 @@ class Logger(Filterer): if exc_info: if type(exc_info) != types.TupleType: exc_info = sys.exc_info() - record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info) + record = self.makeRecord(self.name, level, fn, lno, msg, args, exc_info, extra) self.handle(record) def handle(self, record): @@ -1324,12 +1330,14 @@ def shutdown(): """ for h in _handlerList[:]: # was _handlers.keys(): #errors might occur, for example, if files are locked - #we just ignore them + #we just ignore them if raiseExceptions is not set try: h.flush() h.close() except: - pass + if raiseExceptions: + raise + #else, swallow #Let's try and shutdown automatically on application exit... try: |