cpython: 5de7c3d64f2a (original) (raw)

Mercurial > cpython

changeset 76544:5de7c3d64f2a 3.2

Issue #14632: Updated WatchedFileHandler to deal with race condition. Thanks to John Mulligan for the problem report and patch. [#14632]

Vinay Sajip <vinay_sajip@yahoo.co.uk>
date Tue, 24 Apr 2012 23:25:30 +0100
parents 0adf4fd8df83
children 380821b47872 59bc2d9497b0
files Lib/logging/handlers.py Lib/test/test_logging.py
diffstat 2 files changed, 72 insertions(+), 23 deletions(-)[+] [-] Lib/logging/handlers.py 49 Lib/test/test_logging.py 46

line wrap: on

line diff

--- a/Lib/logging/handlers.py +++ b/Lib/logging/handlers.py @@ -23,7 +23,7 @@ Copyright (C) 2001-2012 Vinay Sajip. All To use, simply 'import logging.handlers' and log away """ -import logging, socket, os, pickle, struct, time, re +import errno, logging, socket, os, pickle, struct, time, re from stat import ST_DEV, ST_INO, ST_MTIME import queue try: @@ -383,11 +383,13 @@ class WatchedFileHandler(logging.FileHan """ def init(self, filename, mode='a', encoding=None, delay=0): logging.FileHandler.init(self, filename, mode, encoding, delay)

+

def emit(self, record): """ @@ -397,21 +399,30 @@ class WatchedFileHandler(logging.FileHan has, close the old stream and reopen the file to get the current stream. """

+ class SocketHandler(logging.Handler): """ A handler class which writes logging records, in pickle format, to

--- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2001-2011 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,

@@ -18,7 +18,7 @@ """Test harness for the logging module. Run all tests. -Copyright (C) 2001-2011 Vinay Sajip. All Rights Reserved. +Copyright (C) 2001-2012 Vinay Sajip. All Rights Reserved. """ import logging @@ -33,6 +33,7 @@ import gc import json import os import queue +import random import re import select import socket @@ -43,6 +44,7 @@ import tempfile from test.support import captured_stdout, run_with_locale, run_unittest from test.support import TestHandler, Matcher import textwrap +import time import unittest import warnings import weakref @@ -2301,7 +2303,6 @@ for when, exp in (('S', 1), # Failures occur on some systems for MIDNIGHT and W0. # Print detailed calculation for MIDNIGHT so we can try to see # what's going on

@@ -2328,6 +2329,43 @@ for when, exp in (('S', 1), rh.close() setattr(TimedRotatingFileHandlerTest, "test_compute_rollover_%s" % when, test_compute_rollover) +class HandlerTest(BaseTest): +

+

+

+ +

Set the locale to the platform-dependent default. I have no idea

why the test does this, but in any case we save the current locale

first and restore it at the end.

@@ -2341,7 +2379,7 @@ def test_main(): LogRecordFactoryTest, ChildLoggerTest, QueueHandlerTest, RotatingFileHandlerTest, LastResortTest,

if name == "main":