mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
Issue #7086: Added TCP support to SysLogHandler and tidied up some anachronisms in the code.
This commit is contained in:
parent
bec4d57a39
commit
cbabd7ec3a
5 changed files with 32 additions and 14 deletions
|
@ -763,11 +763,13 @@ functions.
|
||||||
|
|
||||||
Does basic configuration for the logging system by creating a
|
Does basic configuration for the logging system by creating a
|
||||||
:class:`StreamHandler` with a default :class:`Formatter` and adding it to the
|
: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
|
root logger. The functions :func:`debug`, :func:`info`, :func:`warning`,
|
||||||
the root logger. The functions :func:`debug`, :func:`info`, :func:`warning`,
|
|
||||||
:func:`error` and :func:`critical` will call :func:`basicConfig` automatically
|
:func:`error` and :func:`critical` will call :func:`basicConfig` automatically
|
||||||
if no handlers are defined for the root logger.
|
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.
|
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.
|
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
|
Returns a new instance of the :class:`SysLogHandler` class intended to
|
||||||
communicate with a remote Unix machine whose address is given by *address* in
|
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,
|
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
|
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
|
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,
|
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()
|
.. method:: close()
|
||||||
|
|
|
@ -46,8 +46,8 @@ except ImportError:
|
||||||
|
|
||||||
__author__ = "Vinay Sajip <vinay_sajip@red-dove.com>"
|
__author__ = "Vinay Sajip <vinay_sajip@red-dove.com>"
|
||||||
__status__ = "production"
|
__status__ = "production"
|
||||||
__version__ = "0.5.0.7"
|
__version__ = "0.5.0.9"
|
||||||
__date__ = "20 January 2009"
|
__date__ = "09 October 2009"
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Miscellaneous module data
|
# Miscellaneous module data
|
||||||
|
|
|
@ -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
|
is based on PEP 282 and comments thereto in comp.lang.python, and influenced
|
||||||
by Apache's log4j system.
|
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!
|
To use, simply 'import logging' and log away!
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -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
|
# 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,
|
||||||
|
@ -41,6 +41,7 @@ DEFAULT_UDP_LOGGING_PORT = 9021
|
||||||
DEFAULT_HTTP_LOGGING_PORT = 9022
|
DEFAULT_HTTP_LOGGING_PORT = 9022
|
||||||
DEFAULT_SOAP_LOGGING_PORT = 9023
|
DEFAULT_SOAP_LOGGING_PORT = 9023
|
||||||
SYSLOG_UDP_PORT = 514
|
SYSLOG_UDP_PORT = 514
|
||||||
|
SYSLOG_TCP_PORT = 514
|
||||||
|
|
||||||
_MIDNIGHT = 24 * 60 * 60 # number of seconds in a day
|
_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
|
If backupCount is > 0, when rollover is done, no more than backupCount
|
||||||
files are kept - the oldest ones are deleted.
|
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)
|
BaseRotatingHandler.__init__(self, filename, 'a', encoding, delay)
|
||||||
self.when = when.upper()
|
self.when = when.upper()
|
||||||
self.backupCount = backupCount
|
self.backupCount = backupCount
|
||||||
|
@ -690,7 +691,8 @@ class SysLogHandler(logging.Handler):
|
||||||
"CRITICAL" : "critical"
|
"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.
|
Initialize a handler.
|
||||||
|
|
||||||
|
@ -702,13 +704,16 @@ class SysLogHandler(logging.Handler):
|
||||||
|
|
||||||
self.address = address
|
self.address = address
|
||||||
self.facility = facility
|
self.facility = facility
|
||||||
|
self.socktype = socktype
|
||||||
|
|
||||||
if isinstance(address, str):
|
if isinstance(address, str):
|
||||||
self.unixsocket = 1
|
self.unixsocket = 1
|
||||||
self._connect_unixsocket(address)
|
self._connect_unixsocket(address)
|
||||||
else:
|
else:
|
||||||
self.unixsocket = 0
|
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
|
self.formatter = None
|
||||||
|
|
||||||
def _connect_unixsocket(self, address):
|
def _connect_unixsocket(self, address):
|
||||||
|
@ -781,8 +786,10 @@ class SysLogHandler(logging.Handler):
|
||||||
except socket.error:
|
except socket.error:
|
||||||
self._connect_unixsocket(self.address)
|
self._connect_unixsocket(self.address)
|
||||||
self.socket.send(msg)
|
self.socket.send(msg)
|
||||||
else:
|
elif self.socktype == socket.SOCK_DGRAM:
|
||||||
self.socket.sendto(msg, self.address)
|
self.socket.sendto(msg, self.address)
|
||||||
|
else:
|
||||||
|
self.socket.sendall(msg)
|
||||||
except (KeyboardInterrupt, SystemExit):
|
except (KeyboardInterrupt, SystemExit):
|
||||||
raise
|
raise
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -87,6 +87,9 @@ C-API
|
||||||
Library
|
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
|
- Issue #7082: When falling back to the MIME 'name' parameter, the
|
||||||
correct place to look for it is the Content-Type header.
|
correct place to look for it is the Content-Type header.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue