Commit 57c22379 authored by Vinay Sajip's avatar Vinay Sajip

Merged logging flush/close changes from 3.2.

parents c4c90bdf 0abf61db
...@@ -16,9 +16,9 @@ ...@@ -16,9 +16,9 @@
""" """
Logging package for Python. Based on PEP 282 and comments thereto in 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! To use, simply 'import logging' and log away!
""" """
...@@ -914,8 +914,9 @@ class StreamHandler(Handler): ...@@ -914,8 +914,9 @@ class StreamHandler(Handler):
""" """
Flushes the stream. Flushes the stream.
""" """
if self.stream and hasattr(self.stream, "flush"): with self.lock:
self.stream.flush() if self.stream and hasattr(self.stream, "flush"):
self.stream.flush()
def emit(self, record): def emit(self, record):
""" """
...@@ -964,12 +965,13 @@ class FileHandler(StreamHandler): ...@@ -964,12 +965,13 @@ class FileHandler(StreamHandler):
""" """
Closes the stream. Closes the stream.
""" """
if self.stream: with self.lock:
self.flush() if self.stream:
if hasattr(self.stream, "close"): self.flush()
self.stream.close() if hasattr(self.stream, "close"):
StreamHandler.close(self) self.stream.close()
self.stream = None StreamHandler.close(self)
self.stream = None
def _open(self): def _open(self):
""" """
......
# 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 # Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, # documentation for any purpose and without fee is hereby granted,
...@@ -16,10 +16,9 @@ ...@@ -16,10 +16,9 @@
""" """
Additional handlers for the logging package for Python. The core package is 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 based on PEP 282 and comments thereto in comp.lang.python.
Apache's log4j system.
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! To use, simply 'import logging.handlers' and log away!
""" """
...@@ -594,10 +593,11 @@ class SocketHandler(logging.Handler): ...@@ -594,10 +593,11 @@ class SocketHandler(logging.Handler):
""" """
Closes the socket. Closes the socket.
""" """
if self.sock: with self.lock:
self.sock.close() if self.sock:
self.sock = None self.sock.close()
logging.Handler.close(self) self.sock = None
logging.Handler.close(self)
class DatagramHandler(SocketHandler): class DatagramHandler(SocketHandler):
""" """
...@@ -792,8 +792,9 @@ class SysLogHandler(logging.Handler): ...@@ -792,8 +792,9 @@ class SysLogHandler(logging.Handler):
""" """
Closes the socket. Closes the socket.
""" """
self.socket.close() with self.lock:
logging.Handler.close(self) self.socket.close()
logging.Handler.close(self)
def mapPriority(self, levelName): def mapPriority(self, levelName):
""" """
...@@ -1137,7 +1138,8 @@ class BufferingHandler(logging.Handler): ...@@ -1137,7 +1138,8 @@ class BufferingHandler(logging.Handler):
This version just zaps the buffer to empty. This version just zaps the buffer to empty.
""" """
self.buffer = [] with self.lock:
self.buffer = []
def close(self): def close(self):
""" """
...@@ -1187,18 +1189,20 @@ class MemoryHandler(BufferingHandler): ...@@ -1187,18 +1189,20 @@ class MemoryHandler(BufferingHandler):
The record buffer is also cleared by this operation. The record buffer is also cleared by this operation.
""" """
if self.target: with self.lock:
for record in self.buffer: if self.target:
self.target.handle(record) for record in self.buffer:
self.buffer = [] self.target.handle(record)
self.buffer = []
def close(self): def close(self):
""" """
Flush, set the target to None and lose the buffer. Flush, set the target to None and lose the buffer.
""" """
self.flush() self.flush()
self.target = None with self.lock:
BufferingHandler.close(self) self.target = None
BufferingHandler.close(self)
class QueueHandler(logging.Handler): class QueueHandler(logging.Handler):
......
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