logging: Added threading interlock in basicConfig().

This commit is contained in:
Vinay Sajip 2010-09-11 09:06:21 +00:00
parent 588bd847fb
commit 1ab32f6ebe

View file

@ -1497,22 +1497,28 @@ def basicConfig(**kwargs):
using sys.stdout or sys.stderr), whereas FileHandler closes its stream using sys.stdout or sys.stderr), whereas FileHandler closes its stream
when the handler is closed. when the handler is closed.
""" """
if len(root.handlers) == 0: # Add thread safety in case someone mistakenly calls
filename = kwargs.get("filename") # basicConfig() from multiple threads
if filename: _acquireLock()
mode = kwargs.get("filemode", 'a') try:
hdlr = FileHandler(filename, mode) if len(root.handlers) == 0:
else: filename = kwargs.get("filename")
stream = kwargs.get("stream") if filename:
hdlr = StreamHandler(stream) mode = kwargs.get("filemode", 'a')
fs = kwargs.get("format", BASIC_FORMAT) hdlr = FileHandler(filename, mode)
dfs = kwargs.get("datefmt", None) else:
fmt = Formatter(fs, dfs) stream = kwargs.get("stream")
hdlr.setFormatter(fmt) hdlr = StreamHandler(stream)
root.addHandler(hdlr) fs = kwargs.get("format", BASIC_FORMAT)
level = kwargs.get("level") dfs = kwargs.get("datefmt", None)
if level is not None: fmt = Formatter(fs, dfs)
root.setLevel(level) hdlr.setFormatter(fmt)
root.addHandler(hdlr)
level = kwargs.get("level")
if level is not None:
root.setLevel(level)
finally:
_releaseLock()
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Utility functions at module level. # Utility functions at module level.