summaryrefslogtreecommitdiff
path: root/Lib/logging
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2006-02-09 08:34:14 +0000
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2006-02-09 08:34:14 +0000
commit55f40411c87e3cb1564955ece5191ca876c28f3e (patch)
tree0ed71fd4d651d186787af0682fbc2ee4d4c5dad8 /Lib/logging
parent1a15b6bafc90dc730efb217745abe532e40dae5a (diff)
downloadcpython-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.
Diffstat (limited to 'Lib/logging')
-rw-r--r--Lib/logging/__init__.py20
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: