Commit 260ce432 authored by Vinay Sajip's avatar Vinay Sajip

Propagate exceptions from shutdown() if raiseExceptions is not set.

Added 'extra' keyword argument handling to logging calls, as discussed on python-dev.
parent 1eb77a50
...@@ -1053,14 +1053,20 @@ class Logger(Filterer): ...@@ -1053,14 +1053,20 @@ class Logger(Filterer):
continue continue
return filename, f.f_lineno, co.co_name 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 A factory method which can be overridden in subclasses to create
specialized LogRecords. 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 Low-level logging routine which creates a LogRecord and then calls
all the handlers of this logger to handle the record. all the handlers of this logger to handle the record.
...@@ -1072,7 +1078,7 @@ class Logger(Filterer): ...@@ -1072,7 +1078,7 @@ class Logger(Filterer):
if exc_info: if exc_info:
if type(exc_info) != types.TupleType: if type(exc_info) != types.TupleType:
exc_info = sys.exc_info() 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) self.handle(record)
def handle(self, record): def handle(self, record):
...@@ -1324,12 +1330,14 @@ def shutdown(): ...@@ -1324,12 +1330,14 @@ def shutdown():
""" """
for h in _handlerList[:]: # was _handlers.keys(): for h in _handlerList[:]: # was _handlers.keys():
#errors might occur, for example, if files are locked #errors might occur, for example, if files are locked
#we just ignore them #we just ignore them if raiseExceptions is not set
try: try:
h.flush() h.flush()
h.close() h.close()
except: except:
pass if raiseExceptions:
raise
#else, swallow
#Let's try and shutdown automatically on application exit... #Let's try and shutdown automatically on application exit...
try: try:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment