logging: Added threading interlock in basicConfig().

This commit is contained in:
Vinay Sajip 2010-09-10 08:25:13 +00:00
parent c7937791a1
commit 2314fc729b

View file

@ -1459,22 +1459,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.