summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2009-10-10 20:32:36 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2009-10-10 20:32:36 (GMT)
commitcbabd7ec3aa589bda8f636f4b23c294604d07c63 (patch)
tree9e0eee5ad8d7a80d86c16c3258f983f7b774aa4e
parentbec4d57a392179e23d2eec51db4bdc0806d692ee (diff)
downloadcpython-cbabd7ec3aa589bda8f636f4b23c294604d07c63.zip
cpython-cbabd7ec3aa589bda8f636f4b23c294604d07c63.tar.gz
cpython-cbabd7ec3aa589bda8f636f4b23c294604d07c63.tar.bz2
Issue #7086: Added TCP support to SysLogHandler and tidied up some anachronisms in the code.
-rw-r--r--Doc/library/logging.rst18
-rw-r--r--Lib/logging/__init__.py4
-rw-r--r--Lib/logging/config.py2
-rw-r--r--Lib/logging/handlers.py19
-rw-r--r--Misc/NEWS3
5 files changed, 32 insertions, 14 deletions
diff --git a/Doc/library/logging.rst b/Doc/library/logging.rst
index bdd6809..9dc98fb 100644
--- a/Doc/library/logging.rst
+++ b/Doc/library/logging.rst
@@ -763,11 +763,13 @@ functions.
Does basic configuration for the logging system by creating a
:class:`StreamHandler` with a default :class:`Formatter` and adding it to the
- root logger. The function does nothing if any handlers have been defined for
- the root logger. The functions :func:`debug`, :func:`info`, :func:`warning`,
+ root logger. The functions :func:`debug`, :func:`info`, :func:`warning`,
:func:`error` and :func:`critical` will call :func:`basicConfig` automatically
if no handlers are defined for the root logger.
+ This function does nothing if the root logger already has handlers
+ configured for it.
+
The following keyword arguments are supported.
+--------------+---------------------------------------------+
@@ -1957,16 +1959,22 @@ The :class:`SysLogHandler` class, located in the :mod:`logging.handlers` module,
supports sending logging messages to a remote or local Unix syslog.
-.. class:: SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER)
+.. class:: SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)
Returns a new instance of the :class:`SysLogHandler` class intended to
communicate with a remote Unix machine whose address is given by *address* in
the form of a ``(host, port)`` tuple. If *address* is not specified,
- ``('localhost', 514)`` is used. The address is used to open a UDP socket. An
+ ``('localhost', 514)`` is used. The address is used to open a socket. An
alternative to providing a ``(host, port)`` tuple is providing an address as a
string, for example "/dev/log". In this case, a Unix domain socket is used to
send the message to the syslog. If *facility* is not specified,
- :const:`LOG_USER` is used.
+ :const:`LOG_USER` is used. The type of socket opened depends on the
+ *socktype* argument, which defaults to :const:`socket.SOCK_DGRAM` and thus
+ opens a UDP socket. To open a TCP socket (for use with the newer syslog
+ daemons such as rsyslog), specify a value of :const:`socket.SOCK_STREAM`.
+
+ .. versionchanged:: 3.2
+ *socktype* was added.
.. method:: close()
diff --git a/Lib/logging/__init__.py b/Lib/logging/__init__.py
index 8af9e0f..033fecd 100644
--- a/Lib/logging/__init__.py
+++ b/Lib/logging/__init__.py
@@ -46,8 +46,8 @@ except ImportError:
__author__ = "Vinay Sajip <vinay_sajip@red-dove.com>"
__status__ = "production"
-__version__ = "0.5.0.7"
-__date__ = "20 January 2009"
+__version__ = "0.5.0.9"
+__date__ = "09 October 2009"
#---------------------------------------------------------------------------
# Miscellaneous module data
diff --git a/Lib/logging/config.py b/Lib/logging/config.py
index 07574d3..d5b82b7 100644
--- a/Lib/logging/config.py
+++ b/Lib/logging/config.py
@@ -19,7 +19,7 @@ Configuration functions 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.
-Copyright (C) 2001-2008 Vinay Sajip. All Rights Reserved.
+Copyright (C) 2001-2009 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging' and log away!
"""
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 31352ad..2d71470 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -1,4 +1,4 @@
-# Copyright 2001-2007 by Vinay Sajip. All Rights Reserved.
+# Copyright 2001-2009 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,
@@ -41,6 +41,7 @@ DEFAULT_UDP_LOGGING_PORT = 9021
DEFAULT_HTTP_LOGGING_PORT = 9022
DEFAULT_SOAP_LOGGING_PORT = 9023
SYSLOG_UDP_PORT = 514
+SYSLOG_TCP_PORT = 514
_MIDNIGHT = 24 * 60 * 60 # number of seconds in a day
@@ -155,7 +156,7 @@ class TimedRotatingFileHandler(BaseRotatingHandler):
If backupCount is > 0, when rollover is done, no more than backupCount
files are kept - the oldest ones are deleted.
"""
- def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=0, utc=False):
+ def __init__(self, filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False):
BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
self.when = when.upper()
self.backupCount = backupCount
@@ -690,7 +691,8 @@ class SysLogHandler(logging.Handler):
"CRITICAL" : "critical"
}
- def __init__(self, address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER):
+ def __init__(self, address=('localhost', SYSLOG_UDP_PORT),
+ facility=LOG_USER, socktype=socket.SOCK_DGRAM):
"""
Initialize a handler.
@@ -702,13 +704,16 @@ class SysLogHandler(logging.Handler):
self.address = address
self.facility = facility
+ self.socktype = socktype
+
if isinstance(address, str):
self.unixsocket = 1
self._connect_unixsocket(address)
else:
self.unixsocket = 0
- self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
-
+ self.socket = socket.socket(socket.AF_INET, socktype)
+ if socktype == socket.SOCK_STREAM:
+ self.socket.connect(address)
self.formatter = None
def _connect_unixsocket(self, address):
@@ -781,8 +786,10 @@ class SysLogHandler(logging.Handler):
except socket.error:
self._connect_unixsocket(self.address)
self.socket.send(msg)
- else:
+ elif self.socktype == socket.SOCK_DGRAM:
self.socket.sendto(msg, self.address)
+ else:
+ self.socket.sendall(msg)
except (KeyboardInterrupt, SystemExit):
raise
except:
diff --git a/Misc/NEWS b/Misc/NEWS
index b2c2e6f..479c7e3 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -87,6 +87,9 @@ C-API
Library
-------
+- Issue #7086: Added TCP support to SysLogHandler, and tidied up some
+ anachronisms in the code which were a relic of 1.5.2 compatibility.
+
- Issue #7082: When falling back to the MIME 'name' parameter, the
correct place to look for it is the Content-Type header.