Merged logging flush/close changes from 3.2.

This commit is contained in:
Vinay Sajip 2012-02-23 20:03:49 +00:00
commit 57c223791d
2 changed files with 33 additions and 27 deletions

View File

@ -16,9 +16,9 @@
"""
Logging package for Python. Based on PEP 282 and comments thereto in
comp.lang.python, and influenced by Apache's log4j system.
comp.lang.python.
Copyright (C) 2001-2011 Vinay Sajip. All Rights Reserved.
Copyright (C) 2001-2012 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
"""
@ -914,8 +914,9 @@ class StreamHandler(Handler):
"""
Flushes the stream.
"""
if self.stream and hasattr(self.stream, "flush"):
self.stream.flush()
with self.lock:
if self.stream and hasattr(self.stream, "flush"):
self.stream.flush()
def emit(self, record):
"""
@ -964,12 +965,13 @@ class FileHandler(StreamHandler):
"""
Closes the stream.
"""
if self.stream:
self.flush()
if hasattr(self.stream, "close"):
self.stream.close()
StreamHandler.close(self)
self.stream = None
with self.lock:
if self.stream:
self.flush()
if hasattr(self.stream, "close"):
self.stream.close()
StreamHandler.close(self)
self.stream = None
def _open(self):
"""

View File

@ -1,4 +1,4 @@
# Copyright 2001-2010 by Vinay Sajip. All Rights Reserved.
# Copyright 2001-2012 by Vinay Sajip. All Rights Reserved.
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted,
@ -16,10 +16,9 @@
"""
Additional handlers for the logging package for Python. The core package is
based on PEP 282 and comments thereto in comp.lang.python, and influenced by
Apache's log4j system.
based on PEP 282 and comments thereto in comp.lang.python.
Copyright (C) 2001-2010 Vinay Sajip. All Rights Reserved.
Copyright (C) 2001-2012 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging.handlers' and log away!
"""
@ -594,10 +593,11 @@ class SocketHandler(logging.Handler):
"""
Closes the socket.
"""
if self.sock:
self.sock.close()
self.sock = None
logging.Handler.close(self)
with self.lock:
if self.sock:
self.sock.close()
self.sock = None
logging.Handler.close(self)
class DatagramHandler(SocketHandler):
"""
@ -792,8 +792,9 @@ class SysLogHandler(logging.Handler):
"""
Closes the socket.
"""
self.socket.close()
logging.Handler.close(self)
with self.lock:
self.socket.close()
logging.Handler.close(self)
def mapPriority(self, levelName):
"""
@ -1137,7 +1138,8 @@ class BufferingHandler(logging.Handler):
This version just zaps the buffer to empty.
"""
self.buffer = []
with self.lock:
self.buffer = []
def close(self):
"""
@ -1187,18 +1189,20 @@ class MemoryHandler(BufferingHandler):
The record buffer is also cleared by this operation.
"""
if self.target:
for record in self.buffer:
self.target.handle(record)
self.buffer = []
with self.lock:
if self.target:
for record in self.buffer:
self.target.handle(record)
self.buffer = []
def close(self):
"""
Flush, set the target to None and lose the buffer.
"""
self.flush()
self.target = None
BufferingHandler.close(self)
with self.lock:
self.target = None
BufferingHandler.close(self)
class QueueHandler(logging.Handler):