| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 1 | :mod:`logging.handlers` --- Logging handlers | 
 | 2 | ============================================ | 
 | 3 |  | 
 | 4 | .. module:: logging.handlers | 
 | 5 |    :synopsis: Handlers for the logging module. | 
 | 6 |  | 
 | 7 |  | 
 | 8 | .. moduleauthor:: Vinay Sajip <vinay_sajip@red-dove.com> | 
 | 9 | .. sectionauthor:: Vinay Sajip <vinay_sajip@red-dove.com> | 
 | 10 |  | 
| Vinay Sajip | 01094e1 | 2010-12-19 13:41:26 +0000 | [diff] [blame] | 11 | .. sidebar:: Important | 
 | 12 |  | 
 | 13 |    This page contains only reference information. For tutorials, | 
 | 14 |    please see | 
 | 15 |  | 
 | 16 |    * :ref:`Basic Tutorial <logging-basic-tutorial>` | 
 | 17 |    * :ref:`Advanced Tutorial <logging-advanced-tutorial>` | 
 | 18 |    * :ref:`Logging Cookbook <logging-cookbook>` | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 19 |  | 
 | 20 | .. currentmodule:: logging | 
 | 21 |  | 
| Vinay Sajip | 01094e1 | 2010-12-19 13:41:26 +0000 | [diff] [blame] | 22 | The following useful handlers are provided in the package. Note that three of | 
 | 23 | the handlers (:class:`StreamHandler`, :class:`FileHandler` and | 
 | 24 | :class:`NullHandler`) are actually defined in the :mod:`logging` module itself, | 
 | 25 | but have been documented here along with the other handlers. | 
 | 26 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 27 | .. _stream-handler: | 
 | 28 |  | 
 | 29 | StreamHandler | 
 | 30 | ^^^^^^^^^^^^^ | 
 | 31 |  | 
 | 32 | The :class:`StreamHandler` class, located in the core :mod:`logging` package, | 
 | 33 | sends logging output to streams such as *sys.stdout*, *sys.stderr* or any | 
 | 34 | file-like object (or, more precisely, any object which supports :meth:`write` | 
 | 35 | and :meth:`flush` methods). | 
 | 36 |  | 
 | 37 |  | 
 | 38 | .. class:: StreamHandler(stream=None) | 
 | 39 |  | 
 | 40 |    Returns a new instance of the :class:`StreamHandler` class. If *stream* is | 
 | 41 |    specified, the instance will use it for logging output; otherwise, *sys.stderr* | 
 | 42 |    will be used. | 
 | 43 |  | 
 | 44 |  | 
 | 45 |    .. method:: emit(record) | 
 | 46 |  | 
 | 47 |       If a formatter is specified, it is used to format the record. The record | 
| Vinay Sajip | 689b68a | 2010-12-22 15:04:15 +0000 | [diff] [blame] | 48 |       is then written to the stream with a terminator. If exception information | 
 | 49 |       is present, it is formatted using :func:`traceback.print_exception` and | 
 | 50 |       appended to the stream. | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 51 |  | 
 | 52 |  | 
 | 53 |    .. method:: flush() | 
 | 54 |  | 
 | 55 |       Flushes the stream by calling its :meth:`flush` method. Note that the | 
 | 56 |       :meth:`close` method is inherited from :class:`Handler` and so does | 
 | 57 |       no output, so an explicit :meth:`flush` call may be needed at times. | 
 | 58 |  | 
 | 59 | .. versionchanged:: 3.2 | 
 | 60 |    The ``StreamHandler`` class now has a ``terminator`` attribute, default | 
 | 61 |    value ``'\n'``, which is used as the terminator when writing a formatted | 
 | 62 |    record to a stream. If you don't want this newline termination, you can | 
 | 63 |    set the handler instance's ``terminator`` attribute to the empty string. | 
| Vinay Sajip | 689b68a | 2010-12-22 15:04:15 +0000 | [diff] [blame] | 64 |    In earlier versions, the terminator was hardcoded as ``'\n'``. | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 65 |  | 
 | 66 | .. _file-handler: | 
 | 67 |  | 
 | 68 | FileHandler | 
 | 69 | ^^^^^^^^^^^ | 
 | 70 |  | 
 | 71 | The :class:`FileHandler` class, located in the core :mod:`logging` package, | 
 | 72 | sends logging output to a disk file.  It inherits the output functionality from | 
 | 73 | :class:`StreamHandler`. | 
 | 74 |  | 
 | 75 |  | 
 | 76 | .. class:: FileHandler(filename, mode='a', encoding=None, delay=False) | 
 | 77 |  | 
 | 78 |    Returns a new instance of the :class:`FileHandler` class. The specified file is | 
 | 79 |    opened and used as the stream for logging. If *mode* is not specified, | 
 | 80 |    :const:`'a'` is used.  If *encoding* is not *None*, it is used to open the file | 
 | 81 |    with that encoding.  If *delay* is true, then file opening is deferred until the | 
 | 82 |    first call to :meth:`emit`. By default, the file grows indefinitely. | 
 | 83 |  | 
 | 84 |  | 
 | 85 |    .. method:: close() | 
 | 86 |  | 
 | 87 |       Closes the file. | 
 | 88 |  | 
 | 89 |  | 
 | 90 |    .. method:: emit(record) | 
 | 91 |  | 
 | 92 |       Outputs the record to the file. | 
 | 93 |  | 
 | 94 |  | 
 | 95 | .. _null-handler: | 
 | 96 |  | 
 | 97 | NullHandler | 
 | 98 | ^^^^^^^^^^^ | 
 | 99 |  | 
 | 100 | .. versionadded:: 3.1 | 
 | 101 |  | 
 | 102 | The :class:`NullHandler` class, located in the core :mod:`logging` package, | 
 | 103 | does not do any formatting or output. It is essentially a 'no-op' handler | 
 | 104 | for use by library developers. | 
 | 105 |  | 
 | 106 | .. class:: NullHandler() | 
 | 107 |  | 
 | 108 |    Returns a new instance of the :class:`NullHandler` class. | 
 | 109 |  | 
 | 110 |    .. method:: emit(record) | 
 | 111 |  | 
 | 112 |       This method does nothing. | 
 | 113 |  | 
 | 114 |    .. method:: handle(record) | 
 | 115 |  | 
 | 116 |       This method does nothing. | 
 | 117 |  | 
 | 118 |    .. method:: createLock() | 
 | 119 |  | 
 | 120 |       This method returns ``None`` for the lock, since there is no | 
 | 121 |       underlying I/O to which access needs to be serialized. | 
 | 122 |  | 
 | 123 |  | 
 | 124 | See :ref:`library-config` for more information on how to use | 
 | 125 | :class:`NullHandler`. | 
 | 126 |  | 
 | 127 | .. _watched-file-handler: | 
 | 128 |  | 
 | 129 | WatchedFileHandler | 
 | 130 | ^^^^^^^^^^^^^^^^^^ | 
 | 131 |  | 
 | 132 | .. currentmodule:: logging.handlers | 
 | 133 |  | 
 | 134 | The :class:`WatchedFileHandler` class, located in the :mod:`logging.handlers` | 
 | 135 | module, is a :class:`FileHandler` which watches the file it is logging to. If | 
 | 136 | the file changes, it is closed and reopened using the file name. | 
 | 137 |  | 
 | 138 | A file change can happen because of usage of programs such as *newsyslog* and | 
 | 139 | *logrotate* which perform log file rotation. This handler, intended for use | 
 | 140 | under Unix/Linux, watches the file to see if it has changed since the last emit. | 
 | 141 | (A file is deemed to have changed if its device or inode have changed.) If the | 
 | 142 | file has changed, the old file stream is closed, and the file opened to get a | 
 | 143 | new stream. | 
 | 144 |  | 
 | 145 | This handler is not appropriate for use under Windows, because under Windows | 
 | 146 | open log files cannot be moved or renamed - logging opens the files with | 
 | 147 | exclusive locks - and so there is no need for such a handler. Furthermore, | 
 | 148 | *ST_INO* is not supported under Windows; :func:`stat` always returns zero for | 
 | 149 | this value. | 
 | 150 |  | 
 | 151 |  | 
 | 152 | .. class:: WatchedFileHandler(filename[,mode[, encoding[, delay]]]) | 
 | 153 |  | 
 | 154 |    Returns a new instance of the :class:`WatchedFileHandler` class. The specified | 
 | 155 |    file is opened and used as the stream for logging. If *mode* is not specified, | 
 | 156 |    :const:`'a'` is used.  If *encoding* is not *None*, it is used to open the file | 
 | 157 |    with that encoding.  If *delay* is true, then file opening is deferred until the | 
 | 158 |    first call to :meth:`emit`.  By default, the file grows indefinitely. | 
 | 159 |  | 
 | 160 |  | 
 | 161 |    .. method:: emit(record) | 
 | 162 |  | 
 | 163 |       Outputs the record to the file, but first checks to see if the file has | 
 | 164 |       changed.  If it has, the existing stream is flushed and closed and the | 
 | 165 |       file opened again, before outputting the record to the file. | 
 | 166 |  | 
| Vinay Sajip | 23b94d0 | 2012-01-04 12:02:26 +0000 | [diff] [blame] | 167 | .. _base-rotating-handler: | 
 | 168 |  | 
 | 169 | BaseRotatingHandler | 
 | 170 | ^^^^^^^^^^^^^^^^^^^ | 
 | 171 |  | 
 | 172 | The :class:`BaseRotatingHandler` class, located in the :mod:`logging.handlers` | 
 | 173 | module, is the base class for the rotating file handlers, | 
 | 174 | :class:`RotatingFileHandler` and :class:`TimedRotatingFileHandler`. You should | 
 | 175 | not need to instantiate this class, but it has attributes and methods you may | 
 | 176 | need to override. | 
 | 177 |  | 
 | 178 | .. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False) | 
 | 179 |  | 
 | 180 |    The parameters are as for :class:`FileHandler`. The attributes are: | 
 | 181 |  | 
 | 182 |    .. attribute:: namer | 
 | 183 |  | 
 | 184 |       If this attribute is set to a callable, the :meth:`rotation_filename` | 
 | 185 |       method delegates to this callable. The parameters passed to the callable | 
 | 186 |       are those passed to :meth:`rotation_filename`. | 
 | 187 |  | 
 | 188 |       .. note:: The namer function is called quite a few times during rollover, | 
 | 189 |          so it should be as simple and as fast as possible. It should also | 
 | 190 |          return the same output every time for a given input, otherwise the | 
 | 191 |          rollover behaviour may not work as expected. | 
 | 192 |  | 
 | 193 |       .. versionadded:: 3.3 | 
 | 194 |  | 
 | 195 |  | 
 | 196 |    .. attribute:: BaseRotatingHandler.rotator | 
 | 197 |  | 
 | 198 |       If this attribute is set to a callable, the :meth:`rotate` method | 
 | 199 |       delegates to this callable.  The parameters passed to the callable are | 
 | 200 |       those passed to :meth:`rotate`. | 
 | 201 |  | 
 | 202 |       .. versionadded:: 3.3 | 
 | 203 |  | 
 | 204 |    .. method:: BaseRotatingHandler.rotation_filename(default_name) | 
 | 205 |  | 
 | 206 |       Modify the filename of a log file when rotating. | 
 | 207 |  | 
 | 208 |       This is provided so that a custom filename can be provided. | 
 | 209 |  | 
 | 210 |       The default implementation calls the 'namer' attribute of the handler, | 
 | 211 |       if it's callable, passing the default name to it. If the attribute isn't | 
| Ezio Melotti | 226231c | 2012-01-18 05:40:00 +0200 | [diff] [blame] | 212 |       callable (the default is ``None``), the name is returned unchanged. | 
| Vinay Sajip | 23b94d0 | 2012-01-04 12:02:26 +0000 | [diff] [blame] | 213 |  | 
 | 214 |       :param default_name: The default name for the log file. | 
 | 215 |  | 
 | 216 |       .. versionadded:: 3.3 | 
 | 217 |  | 
 | 218 |  | 
 | 219 |    .. method:: BaseRotatingHandler.rotate(source, dest) | 
 | 220 |  | 
 | 221 |       When rotating, rotate the current log. | 
 | 222 |  | 
 | 223 |       The default implementation calls the 'rotator' attribute of the handler, | 
 | 224 |       if it's callable, passing the source and dest arguments to it. If the | 
| Ezio Melotti | 226231c | 2012-01-18 05:40:00 +0200 | [diff] [blame] | 225 |       attribute isn't callable (the default is ``None``), the source is simply | 
| Vinay Sajip | 23b94d0 | 2012-01-04 12:02:26 +0000 | [diff] [blame] | 226 |       renamed to the destination. | 
 | 227 |  | 
 | 228 |       :param source: The source filename. This is normally the base | 
 | 229 |                      filename, e.g. 'test.log' | 
 | 230 |       :param dest:   The destination filename. This is normally | 
 | 231 |                      what the source is rotated to, e.g. 'test.log.1'. | 
 | 232 |  | 
 | 233 |       .. versionadded:: 3.3 | 
 | 234 |  | 
 | 235 | The reason the attributes exist is to save you having to subclass - you can use | 
 | 236 | the same callables for instances of :class:`RotatingFileHandler` and | 
 | 237 | :class:`TimedRotatingFileHandler`. If either the namer or rotator callable | 
 | 238 | raises an exception, this will be handled in the same way as any other | 
 | 239 | exception during an :meth:`emit` call, i.e. via the :meth:`handleError` method | 
 | 240 | of the handler. | 
 | 241 |  | 
 | 242 | If you need to make more significant changes to rotation processing, you can | 
 | 243 | override the methods. | 
 | 244 |  | 
 | 245 | For an example, see :ref:`cookbook-rotator-namer`. | 
 | 246 |  | 
 | 247 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 248 | .. _rotating-file-handler: | 
 | 249 |  | 
 | 250 | RotatingFileHandler | 
 | 251 | ^^^^^^^^^^^^^^^^^^^ | 
 | 252 |  | 
 | 253 | The :class:`RotatingFileHandler` class, located in the :mod:`logging.handlers` | 
 | 254 | module, supports rotation of disk log files. | 
 | 255 |  | 
 | 256 |  | 
 | 257 | .. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=0) | 
 | 258 |  | 
 | 259 |    Returns a new instance of the :class:`RotatingFileHandler` class. The specified | 
 | 260 |    file is opened and used as the stream for logging. If *mode* is not specified, | 
 | 261 |    ``'a'`` is used.  If *encoding* is not *None*, it is used to open the file | 
 | 262 |    with that encoding.  If *delay* is true, then file opening is deferred until the | 
 | 263 |    first call to :meth:`emit`.  By default, the file grows indefinitely. | 
 | 264 |  | 
 | 265 |    You can use the *maxBytes* and *backupCount* values to allow the file to | 
 | 266 |    :dfn:`rollover` at a predetermined size. When the size is about to be exceeded, | 
 | 267 |    the file is closed and a new file is silently opened for output. Rollover occurs | 
 | 268 |    whenever the current log file is nearly *maxBytes* in length; if *maxBytes* is | 
 | 269 |    zero, rollover never occurs.  If *backupCount* is non-zero, the system will save | 
 | 270 |    old log files by appending the extensions '.1', '.2' etc., to the filename. For | 
 | 271 |    example, with a *backupCount* of 5 and a base file name of :file:`app.log`, you | 
 | 272 |    would get :file:`app.log`, :file:`app.log.1`, :file:`app.log.2`, up to | 
 | 273 |    :file:`app.log.5`. The file being written to is always :file:`app.log`.  When | 
 | 274 |    this file is filled, it is closed and renamed to :file:`app.log.1`, and if files | 
 | 275 |    :file:`app.log.1`, :file:`app.log.2`, etc.  exist, then they are renamed to | 
 | 276 |    :file:`app.log.2`, :file:`app.log.3` etc.  respectively. | 
 | 277 |  | 
 | 278 |  | 
 | 279 |    .. method:: doRollover() | 
 | 280 |  | 
 | 281 |       Does a rollover, as described above. | 
 | 282 |  | 
 | 283 |  | 
 | 284 |    .. method:: emit(record) | 
 | 285 |  | 
 | 286 |       Outputs the record to the file, catering for rollover as described | 
 | 287 |       previously. | 
 | 288 |  | 
 | 289 | .. _timed-rotating-file-handler: | 
 | 290 |  | 
 | 291 | TimedRotatingFileHandler | 
 | 292 | ^^^^^^^^^^^^^^^^^^^^^^^^ | 
 | 293 |  | 
 | 294 | The :class:`TimedRotatingFileHandler` class, located in the | 
 | 295 | :mod:`logging.handlers` module, supports rotation of disk log files at certain | 
 | 296 | timed intervals. | 
 | 297 |  | 
 | 298 |  | 
| Vinay Sajip | a713079 | 2013-04-12 17:04:23 +0100 | [diff] [blame] | 299 | .. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None) | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 300 |  | 
 | 301 |    Returns a new instance of the :class:`TimedRotatingFileHandler` class. The | 
 | 302 |    specified file is opened and used as the stream for logging. On rotating it also | 
 | 303 |    sets the filename suffix. Rotating happens based on the product of *when* and | 
 | 304 |    *interval*. | 
 | 305 |  | 
 | 306 |    You can use the *when* to specify the type of *interval*. The list of possible | 
 | 307 |    values is below.  Note that they are not case sensitive. | 
 | 308 |  | 
 | 309 |    +----------------+-----------------------+ | 
 | 310 |    | Value          | Type of interval      | | 
 | 311 |    +================+=======================+ | 
 | 312 |    | ``'S'``        | Seconds               | | 
 | 313 |    +----------------+-----------------------+ | 
 | 314 |    | ``'M'``        | Minutes               | | 
 | 315 |    +----------------+-----------------------+ | 
 | 316 |    | ``'H'``        | Hours                 | | 
 | 317 |    +----------------+-----------------------+ | 
 | 318 |    | ``'D'``        | Days                  | | 
 | 319 |    +----------------+-----------------------+ | 
| Vinay Sajip | 832d99b | 2013-03-08 23:24:30 +0000 | [diff] [blame] | 320 |    | ``'W0'-'W6'``  | Weekday (0=Monday)    | | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 321 |    +----------------+-----------------------+ | 
 | 322 |    | ``'midnight'`` | Roll over at midnight | | 
 | 323 |    +----------------+-----------------------+ | 
 | 324 |  | 
| Vinay Sajip | 832d99b | 2013-03-08 23:24:30 +0000 | [diff] [blame] | 325 |    When using weekday-based rotation, specify 'W0' for Monday, 'W1' for | 
 | 326 |    Tuesday, and so on up to 'W6' for Sunday. In this case, the value passed for | 
 | 327 |    *interval* isn't used. | 
 | 328 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 329 |    The system will save old log files by appending extensions to the filename. | 
 | 330 |    The extensions are date-and-time based, using the strftime format | 
 | 331 |    ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the | 
 | 332 |    rollover interval. | 
 | 333 |  | 
 | 334 |    When computing the next rollover time for the first time (when the handler | 
 | 335 |    is created), the last modification time of an existing log file, or else | 
 | 336 |    the current time, is used to compute when the next rotation will occur. | 
 | 337 |  | 
 | 338 |    If the *utc* argument is true, times in UTC will be used; otherwise | 
 | 339 |    local time is used. | 
 | 340 |  | 
 | 341 |    If *backupCount* is nonzero, at most *backupCount* files | 
 | 342 |    will be kept, and if more would be created when rollover occurs, the oldest | 
 | 343 |    one is deleted. The deletion logic uses the interval to determine which | 
 | 344 |    files to delete, so changing the interval may leave old files lying around. | 
 | 345 |  | 
 | 346 |    If *delay* is true, then file opening is deferred until the first call to | 
 | 347 |    :meth:`emit`. | 
 | 348 |  | 
| Vinay Sajip | a713079 | 2013-04-12 17:04:23 +0100 | [diff] [blame] | 349 |    If *atTime* is not ``None``, it must be a ``datetime.time`` instance which | 
 | 350 |    specifies the time of day when rollover occurs, for the cases where rollover | 
 | 351 |    is set to happen "at midnight" or "on a particular weekday". | 
 | 352 |  | 
 | 353 |    .. versionchanged:: 3.4 | 
 | 354 |       *atTime* parameter was added. | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 355 |  | 
 | 356 |    .. method:: doRollover() | 
 | 357 |  | 
 | 358 |       Does a rollover, as described above. | 
 | 359 |  | 
 | 360 |  | 
 | 361 |    .. method:: emit(record) | 
 | 362 |  | 
 | 363 |       Outputs the record to the file, catering for rollover as described above. | 
 | 364 |  | 
 | 365 |  | 
 | 366 | .. _socket-handler: | 
 | 367 |  | 
 | 368 | SocketHandler | 
 | 369 | ^^^^^^^^^^^^^ | 
 | 370 |  | 
 | 371 | The :class:`SocketHandler` class, located in the :mod:`logging.handlers` module, | 
 | 372 | sends logging output to a network socket. The base class uses a TCP socket. | 
 | 373 |  | 
 | 374 |  | 
 | 375 | .. class:: SocketHandler(host, port) | 
 | 376 |  | 
 | 377 |    Returns a new instance of the :class:`SocketHandler` class intended to | 
 | 378 |    communicate with a remote machine whose address is given by *host* and *port*. | 
 | 379 |  | 
 | 380 |  | 
 | 381 |    .. method:: close() | 
 | 382 |  | 
 | 383 |       Closes the socket. | 
 | 384 |  | 
 | 385 |  | 
 | 386 |    .. method:: emit() | 
 | 387 |  | 
 | 388 |       Pickles the record's attribute dictionary and writes it to the socket in | 
 | 389 |       binary format. If there is an error with the socket, silently drops the | 
 | 390 |       packet. If the connection was previously lost, re-establishes the | 
 | 391 |       connection. To unpickle the record at the receiving end into a | 
 | 392 |       :class:`LogRecord`, use the :func:`makeLogRecord` function. | 
 | 393 |  | 
 | 394 |  | 
 | 395 |    .. method:: handleError() | 
 | 396 |  | 
 | 397 |       Handles an error which has occurred during :meth:`emit`. The most likely | 
 | 398 |       cause is a lost connection. Closes the socket so that we can retry on the | 
 | 399 |       next event. | 
 | 400 |  | 
 | 401 |  | 
 | 402 |    .. method:: makeSocket() | 
 | 403 |  | 
 | 404 |       This is a factory method which allows subclasses to define the precise | 
 | 405 |       type of socket they want. The default implementation creates a TCP socket | 
 | 406 |       (:const:`socket.SOCK_STREAM`). | 
 | 407 |  | 
 | 408 |  | 
 | 409 |    .. method:: makePickle(record) | 
 | 410 |  | 
 | 411 |       Pickles the record's attribute dictionary in binary format with a length | 
 | 412 |       prefix, and returns it ready for transmission across the socket. | 
 | 413 |  | 
 | 414 |       Note that pickles aren't completely secure. If you are concerned about | 
 | 415 |       security, you may want to override this method to implement a more secure | 
 | 416 |       mechanism. For example, you can sign pickles using HMAC and then verify | 
 | 417 |       them on the receiving end, or alternatively you can disable unpickling of | 
 | 418 |       global objects on the receiving end. | 
 | 419 |  | 
| Georg Brandl | 08e278a | 2011-02-15 12:44:43 +0000 | [diff] [blame] | 420 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 421 |    .. method:: send(packet) | 
 | 422 |  | 
 | 423 |       Send a pickled string *packet* to the socket. This function allows for | 
 | 424 |       partial sends which can happen when the network is busy. | 
 | 425 |  | 
| Georg Brandl | 08e278a | 2011-02-15 12:44:43 +0000 | [diff] [blame] | 426 |  | 
| Georg Brandl | dbb9585 | 2011-02-15 12:41:17 +0000 | [diff] [blame] | 427 |    .. method:: createSocket() | 
 | 428 |  | 
 | 429 |       Tries to create a socket; on failure, uses an exponential back-off | 
 | 430 |       algorithm.  On intial failure, the handler will drop the message it was | 
 | 431 |       trying to send.  When subsequent messages are handled by the same | 
 | 432 |       instance, it will not try connecting until some time has passed.  The | 
 | 433 |       default parameters are such that the initial delay is one second, and if | 
 | 434 |       after that delay the connection still can't be made, the handler will | 
 | 435 |       double the delay each time up to a maximum of 30 seconds. | 
 | 436 |  | 
 | 437 |       This behaviour is controlled by the following handler attributes: | 
 | 438 |  | 
 | 439 |       * ``retryStart`` (initial delay, defaulting to 1.0 seconds). | 
 | 440 |       * ``retryFactor`` (multiplier, defaulting to 2.0). | 
 | 441 |       * ``retryMax`` (maximum delay, defaulting to 30.0 seconds). | 
 | 442 |  | 
 | 443 |       This means that if the remote listener starts up *after* the handler has | 
 | 444 |       been used, you could lose messages (since the handler won't even attempt | 
 | 445 |       a connection until the delay has elapsed, but just silently drop messages | 
 | 446 |       during the delay period). | 
| Georg Brandl | 08e278a | 2011-02-15 12:44:43 +0000 | [diff] [blame] | 447 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 448 |  | 
 | 449 | .. _datagram-handler: | 
 | 450 |  | 
 | 451 | DatagramHandler | 
 | 452 | ^^^^^^^^^^^^^^^ | 
 | 453 |  | 
 | 454 | The :class:`DatagramHandler` class, located in the :mod:`logging.handlers` | 
 | 455 | module, inherits from :class:`SocketHandler` to support sending logging messages | 
 | 456 | over UDP sockets. | 
 | 457 |  | 
 | 458 |  | 
 | 459 | .. class:: DatagramHandler(host, port) | 
 | 460 |  | 
 | 461 |    Returns a new instance of the :class:`DatagramHandler` class intended to | 
 | 462 |    communicate with a remote machine whose address is given by *host* and *port*. | 
 | 463 |  | 
 | 464 |  | 
 | 465 |    .. method:: emit() | 
 | 466 |  | 
 | 467 |       Pickles the record's attribute dictionary and writes it to the socket in | 
 | 468 |       binary format. If there is an error with the socket, silently drops the | 
 | 469 |       packet. To unpickle the record at the receiving end into a | 
 | 470 |       :class:`LogRecord`, use the :func:`makeLogRecord` function. | 
 | 471 |  | 
 | 472 |  | 
 | 473 |    .. method:: makeSocket() | 
 | 474 |  | 
 | 475 |       The factory method of :class:`SocketHandler` is here overridden to create | 
 | 476 |       a UDP socket (:const:`socket.SOCK_DGRAM`). | 
 | 477 |  | 
 | 478 |  | 
 | 479 |    .. method:: send(s) | 
 | 480 |  | 
 | 481 |       Send a pickled string to a socket. | 
 | 482 |  | 
 | 483 |  | 
 | 484 | .. _syslog-handler: | 
 | 485 |  | 
 | 486 | SysLogHandler | 
 | 487 | ^^^^^^^^^^^^^ | 
 | 488 |  | 
 | 489 | The :class:`SysLogHandler` class, located in the :mod:`logging.handlers` module, | 
 | 490 | supports sending logging messages to a remote or local Unix syslog. | 
 | 491 |  | 
 | 492 |  | 
 | 493 | .. class:: SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM) | 
 | 494 |  | 
 | 495 |    Returns a new instance of the :class:`SysLogHandler` class intended to | 
 | 496 |    communicate with a remote Unix machine whose address is given by *address* in | 
 | 497 |    the form of a ``(host, port)`` tuple.  If *address* is not specified, | 
 | 498 |    ``('localhost', 514)`` is used.  The address is used to open a socket.  An | 
 | 499 |    alternative to providing a ``(host, port)`` tuple is providing an address as a | 
 | 500 |    string, for example '/dev/log'. In this case, a Unix domain socket is used to | 
 | 501 |    send the message to the syslog. If *facility* is not specified, | 
 | 502 |    :const:`LOG_USER` is used. The type of socket opened depends on the | 
 | 503 |    *socktype* argument, which defaults to :const:`socket.SOCK_DGRAM` and thus | 
 | 504 |    opens a UDP socket. To open a TCP socket (for use with the newer syslog | 
 | 505 |    daemons such as rsyslog), specify a value of :const:`socket.SOCK_STREAM`. | 
 | 506 |  | 
 | 507 |    Note that if your server is not listening on UDP port 514, | 
 | 508 |    :class:`SysLogHandler` may appear not to work. In that case, check what | 
 | 509 |    address you should be using for a domain socket - it's system dependent. | 
 | 510 |    For example, on Linux it's usually '/dev/log' but on OS/X it's | 
 | 511 |    '/var/run/syslog'. You'll need to check your platform and use the | 
 | 512 |    appropriate address (you may need to do this check at runtime if your | 
 | 513 |    application needs to run on several platforms). On Windows, you pretty | 
 | 514 |    much have to use the UDP option. | 
 | 515 |  | 
 | 516 |    .. versionchanged:: 3.2 | 
 | 517 |       *socktype* was added. | 
 | 518 |  | 
 | 519 |  | 
 | 520 |    .. method:: close() | 
 | 521 |  | 
 | 522 |       Closes the socket to the remote host. | 
 | 523 |  | 
 | 524 |  | 
 | 525 |    .. method:: emit(record) | 
 | 526 |  | 
 | 527 |       The record is formatted, and then sent to the syslog server. If exception | 
 | 528 |       information is present, it is *not* sent to the server. | 
 | 529 |  | 
| Vinay Sajip | 645e458 | 2011-06-10 18:52:50 +0100 | [diff] [blame] | 530 |       .. versionchanged:: 3.2.1 | 
 | 531 |          (See: :issue:`12168`.) In earlier versions, the message sent to the | 
 | 532 |          syslog daemons was always terminated with a NUL byte, because early | 
 | 533 |          versions of these daemons expected a NUL terminated message - even | 
 | 534 |          though it's not in the relevant specification (RF 5424). More recent | 
 | 535 |          versions of these daemons don't expect the NUL byte but strip it off | 
 | 536 |          if it's there, and even more recent daemons (which adhere more closely | 
 | 537 |          to RFC 5424) pass the NUL byte on as part of the message. | 
 | 538 |  | 
 | 539 |          To enable easier handling of syslog messages in the face of all these | 
 | 540 |          differing daemon behaviours, the appending of the NUL byte has been | 
 | 541 |          made configurable, through the use of a class-level attribute, | 
 | 542 |          ``append_nul``. This defaults to ``True`` (preserving the existing | 
 | 543 |          behaviour) but can be set to ``False`` on a ``SysLogHandler`` instance | 
 | 544 |          in order for that instance to *not* append the NUL terminator. | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 545 |  | 
| Vinay Sajip | 2353e35 | 2011-06-27 15:40:06 +0100 | [diff] [blame] | 546 |       .. versionchanged:: 3.3 | 
 | 547 |          (See: :issue:`12419`.) In earlier versions, there was no facility for | 
 | 548 |          an "ident" or "tag" prefix to identify the source of the message. This | 
 | 549 |          can now be specified using a class-level attribute, defaulting to | 
 | 550 |          ``""`` to preserve existing behaviour, but which can be overridden on | 
 | 551 |          a ``SysLogHandler`` instance in order for that instance to prepend | 
 | 552 |          the ident to every message handled. Note that the provided ident must | 
 | 553 |          be text, not bytes, and is prepended to the message exactly as is. | 
 | 554 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 555 |    .. method:: encodePriority(facility, priority) | 
 | 556 |  | 
 | 557 |       Encodes the facility and priority into an integer. You can pass in strings | 
 | 558 |       or integers - if strings are passed, internal mapping dictionaries are | 
 | 559 |       used to convert them to integers. | 
 | 560 |  | 
 | 561 |       The symbolic ``LOG_`` values are defined in :class:`SysLogHandler` and | 
 | 562 |       mirror the values defined in the ``sys/syslog.h`` header file. | 
 | 563 |  | 
 | 564 |       **Priorities** | 
 | 565 |  | 
 | 566 |       +--------------------------+---------------+ | 
 | 567 |       | Name (string)            | Symbolic value| | 
 | 568 |       +==========================+===============+ | 
 | 569 |       | ``alert``                | LOG_ALERT     | | 
 | 570 |       +--------------------------+---------------+ | 
 | 571 |       | ``crit`` or ``critical`` | LOG_CRIT      | | 
 | 572 |       +--------------------------+---------------+ | 
 | 573 |       | ``debug``                | LOG_DEBUG     | | 
 | 574 |       +--------------------------+---------------+ | 
 | 575 |       | ``emerg`` or ``panic``   | LOG_EMERG     | | 
 | 576 |       +--------------------------+---------------+ | 
 | 577 |       | ``err`` or ``error``     | LOG_ERR       | | 
 | 578 |       +--------------------------+---------------+ | 
 | 579 |       | ``info``                 | LOG_INFO      | | 
 | 580 |       +--------------------------+---------------+ | 
 | 581 |       | ``notice``               | LOG_NOTICE    | | 
 | 582 |       +--------------------------+---------------+ | 
 | 583 |       | ``warn`` or ``warning``  | LOG_WARNING   | | 
 | 584 |       +--------------------------+---------------+ | 
 | 585 |  | 
 | 586 |       **Facilities** | 
 | 587 |  | 
 | 588 |       +---------------+---------------+ | 
 | 589 |       | Name (string) | Symbolic value| | 
 | 590 |       +===============+===============+ | 
 | 591 |       | ``auth``      | LOG_AUTH      | | 
 | 592 |       +---------------+---------------+ | 
 | 593 |       | ``authpriv``  | LOG_AUTHPRIV  | | 
 | 594 |       +---------------+---------------+ | 
 | 595 |       | ``cron``      | LOG_CRON      | | 
 | 596 |       +---------------+---------------+ | 
 | 597 |       | ``daemon``    | LOG_DAEMON    | | 
 | 598 |       +---------------+---------------+ | 
 | 599 |       | ``ftp``       | LOG_FTP       | | 
 | 600 |       +---------------+---------------+ | 
 | 601 |       | ``kern``      | LOG_KERN      | | 
 | 602 |       +---------------+---------------+ | 
 | 603 |       | ``lpr``       | LOG_LPR       | | 
 | 604 |       +---------------+---------------+ | 
 | 605 |       | ``mail``      | LOG_MAIL      | | 
 | 606 |       +---------------+---------------+ | 
 | 607 |       | ``news``      | LOG_NEWS      | | 
 | 608 |       +---------------+---------------+ | 
 | 609 |       | ``syslog``    | LOG_SYSLOG    | | 
 | 610 |       +---------------+---------------+ | 
 | 611 |       | ``user``      | LOG_USER      | | 
 | 612 |       +---------------+---------------+ | 
 | 613 |       | ``uucp``      | LOG_UUCP      | | 
 | 614 |       +---------------+---------------+ | 
 | 615 |       | ``local0``    | LOG_LOCAL0    | | 
 | 616 |       +---------------+---------------+ | 
 | 617 |       | ``local1``    | LOG_LOCAL1    | | 
 | 618 |       +---------------+---------------+ | 
 | 619 |       | ``local2``    | LOG_LOCAL2    | | 
 | 620 |       +---------------+---------------+ | 
 | 621 |       | ``local3``    | LOG_LOCAL3    | | 
 | 622 |       +---------------+---------------+ | 
 | 623 |       | ``local4``    | LOG_LOCAL4    | | 
 | 624 |       +---------------+---------------+ | 
 | 625 |       | ``local5``    | LOG_LOCAL5    | | 
 | 626 |       +---------------+---------------+ | 
 | 627 |       | ``local6``    | LOG_LOCAL6    | | 
 | 628 |       +---------------+---------------+ | 
 | 629 |       | ``local7``    | LOG_LOCAL7    | | 
 | 630 |       +---------------+---------------+ | 
 | 631 |  | 
 | 632 |    .. method:: mapPriority(levelname) | 
 | 633 |  | 
 | 634 |       Maps a logging level name to a syslog priority name. | 
 | 635 |       You may need to override this if you are using custom levels, or | 
 | 636 |       if the default algorithm is not suitable for your needs. The | 
 | 637 |       default algorithm maps ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` and | 
 | 638 |       ``CRITICAL`` to the equivalent syslog names, and all other level | 
 | 639 |       names to 'warning'. | 
 | 640 |  | 
 | 641 | .. _nt-eventlog-handler: | 
 | 642 |  | 
 | 643 | NTEventLogHandler | 
 | 644 | ^^^^^^^^^^^^^^^^^ | 
 | 645 |  | 
 | 646 | The :class:`NTEventLogHandler` class, located in the :mod:`logging.handlers` | 
 | 647 | module, supports sending logging messages to a local Windows NT, Windows 2000 or | 
 | 648 | Windows XP event log. Before you can use it, you need Mark Hammond's Win32 | 
 | 649 | extensions for Python installed. | 
 | 650 |  | 
 | 651 |  | 
 | 652 | .. class:: NTEventLogHandler(appname, dllname=None, logtype='Application') | 
 | 653 |  | 
 | 654 |    Returns a new instance of the :class:`NTEventLogHandler` class. The *appname* is | 
 | 655 |    used to define the application name as it appears in the event log. An | 
 | 656 |    appropriate registry entry is created using this name. The *dllname* should give | 
 | 657 |    the fully qualified pathname of a .dll or .exe which contains message | 
 | 658 |    definitions to hold in the log (if not specified, ``'win32service.pyd'`` is used | 
 | 659 |    - this is installed with the Win32 extensions and contains some basic | 
 | 660 |    placeholder message definitions. Note that use of these placeholders will make | 
 | 661 |    your event logs big, as the entire message source is held in the log. If you | 
 | 662 |    want slimmer logs, you have to pass in the name of your own .dll or .exe which | 
 | 663 |    contains the message definitions you want to use in the event log). The | 
 | 664 |    *logtype* is one of ``'Application'``, ``'System'`` or ``'Security'``, and | 
 | 665 |    defaults to ``'Application'``. | 
 | 666 |  | 
 | 667 |  | 
 | 668 |    .. method:: close() | 
 | 669 |  | 
 | 670 |       At this point, you can remove the application name from the registry as a | 
 | 671 |       source of event log entries. However, if you do this, you will not be able | 
 | 672 |       to see the events as you intended in the Event Log Viewer - it needs to be | 
 | 673 |       able to access the registry to get the .dll name. The current version does | 
 | 674 |       not do this. | 
 | 675 |  | 
 | 676 |  | 
 | 677 |    .. method:: emit(record) | 
 | 678 |  | 
 | 679 |       Determines the message ID, event category and event type, and then logs | 
 | 680 |       the message in the NT event log. | 
 | 681 |  | 
 | 682 |  | 
 | 683 |    .. method:: getEventCategory(record) | 
 | 684 |  | 
 | 685 |       Returns the event category for the record. Override this if you want to | 
 | 686 |       specify your own categories. This version returns 0. | 
 | 687 |  | 
 | 688 |  | 
 | 689 |    .. method:: getEventType(record) | 
 | 690 |  | 
 | 691 |       Returns the event type for the record. Override this if you want to | 
 | 692 |       specify your own types. This version does a mapping using the handler's | 
 | 693 |       typemap attribute, which is set up in :meth:`__init__` to a dictionary | 
 | 694 |       which contains mappings for :const:`DEBUG`, :const:`INFO`, | 
 | 695 |       :const:`WARNING`, :const:`ERROR` and :const:`CRITICAL`. If you are using | 
 | 696 |       your own levels, you will either need to override this method or place a | 
 | 697 |       suitable dictionary in the handler's *typemap* attribute. | 
 | 698 |  | 
 | 699 |  | 
 | 700 |    .. method:: getMessageID(record) | 
 | 701 |  | 
 | 702 |       Returns the message ID for the record. If you are using your own messages, | 
 | 703 |       you could do this by having the *msg* passed to the logger being an ID | 
 | 704 |       rather than a format string. Then, in here, you could use a dictionary | 
 | 705 |       lookup to get the message ID. This version returns 1, which is the base | 
 | 706 |       message ID in :file:`win32service.pyd`. | 
 | 707 |  | 
 | 708 | .. _smtp-handler: | 
 | 709 |  | 
 | 710 | SMTPHandler | 
 | 711 | ^^^^^^^^^^^ | 
 | 712 |  | 
 | 713 | The :class:`SMTPHandler` class, located in the :mod:`logging.handlers` module, | 
 | 714 | supports sending logging messages to an email address via SMTP. | 
 | 715 |  | 
 | 716 |  | 
| Vinay Sajip | 38a12af | 2012-03-26 17:17:39 +0100 | [diff] [blame] | 717 | .. class:: SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0) | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 718 |  | 
 | 719 |    Returns a new instance of the :class:`SMTPHandler` class. The instance is | 
 | 720 |    initialized with the from and to addresses and subject line of the email. The | 
 | 721 |    *toaddrs* should be a list of strings. To specify a non-standard SMTP port, use | 
 | 722 |    the (host, port) tuple format for the *mailhost* argument. If you use a string, | 
 | 723 |    the standard SMTP port is used. If your SMTP server requires authentication, you | 
 | 724 |    can specify a (username, password) tuple for the *credentials* argument. | 
 | 725 |  | 
| Vinay Sajip | 9525956 | 2011-08-01 11:31:52 +0100 | [diff] [blame] | 726 |    To specify the use of a secure protocol (TLS), pass in a tuple to the | 
 | 727 |    *secure* argument. This will only be used when authentication credentials are | 
 | 728 |    supplied. The tuple should be either an empty tuple, or a single-value tuple | 
 | 729 |    with the name of a keyfile, or a 2-value tuple with the names of the keyfile | 
 | 730 |    and certificate file. (This tuple is passed to the | 
 | 731 |    :meth:`smtplib.SMTP.starttls` method.) | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 732 |  | 
| Vinay Sajip | 38a12af | 2012-03-26 17:17:39 +0100 | [diff] [blame] | 733 |    A timeout can be specified for communication with the SMTP server using the | 
 | 734 |    *timeout* argument. | 
 | 735 |  | 
 | 736 |    .. versionadded:: 3.3 | 
 | 737 |       The *timeout* argument was added. | 
 | 738 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 739 |    .. method:: emit(record) | 
 | 740 |  | 
 | 741 |       Formats the record and sends it to the specified addressees. | 
 | 742 |  | 
 | 743 |  | 
 | 744 |    .. method:: getSubject(record) | 
 | 745 |  | 
 | 746 |       If you want to specify a subject line which is record-dependent, override | 
 | 747 |       this method. | 
 | 748 |  | 
 | 749 | .. _memory-handler: | 
 | 750 |  | 
 | 751 | MemoryHandler | 
 | 752 | ^^^^^^^^^^^^^ | 
 | 753 |  | 
 | 754 | The :class:`MemoryHandler` class, located in the :mod:`logging.handlers` module, | 
 | 755 | supports buffering of logging records in memory, periodically flushing them to a | 
 | 756 | :dfn:`target` handler. Flushing occurs whenever the buffer is full, or when an | 
 | 757 | event of a certain severity or greater is seen. | 
 | 758 |  | 
 | 759 | :class:`MemoryHandler` is a subclass of the more general | 
 | 760 | :class:`BufferingHandler`, which is an abstract class. This buffers logging | 
 | 761 | records in memory. Whenever each record is added to the buffer, a check is made | 
 | 762 | by calling :meth:`shouldFlush` to see if the buffer should be flushed.  If it | 
| Vinay Sajip | 8ece80f | 2012-03-26 17:09:58 +0100 | [diff] [blame] | 763 | should, then :meth:`flush` is expected to do the flushing. | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 764 |  | 
 | 765 |  | 
 | 766 | .. class:: BufferingHandler(capacity) | 
 | 767 |  | 
 | 768 |    Initializes the handler with a buffer of the specified capacity. | 
 | 769 |  | 
 | 770 |  | 
 | 771 |    .. method:: emit(record) | 
 | 772 |  | 
 | 773 |       Appends the record to the buffer. If :meth:`shouldFlush` returns true, | 
 | 774 |       calls :meth:`flush` to process the buffer. | 
 | 775 |  | 
 | 776 |  | 
 | 777 |    .. method:: flush() | 
 | 778 |  | 
 | 779 |       You can override this to implement custom flushing behavior. This version | 
 | 780 |       just zaps the buffer to empty. | 
 | 781 |  | 
 | 782 |  | 
 | 783 |    .. method:: shouldFlush(record) | 
 | 784 |  | 
 | 785 |       Returns true if the buffer is up to capacity. This method can be | 
 | 786 |       overridden to implement custom flushing strategies. | 
 | 787 |  | 
 | 788 |  | 
 | 789 | .. class:: MemoryHandler(capacity, flushLevel=ERROR, target=None) | 
 | 790 |  | 
 | 791 |    Returns a new instance of the :class:`MemoryHandler` class. The instance is | 
 | 792 |    initialized with a buffer size of *capacity*. If *flushLevel* is not specified, | 
 | 793 |    :const:`ERROR` is used. If no *target* is specified, the target will need to be | 
 | 794 |    set using :meth:`setTarget` before this handler does anything useful. | 
 | 795 |  | 
 | 796 |  | 
 | 797 |    .. method:: close() | 
 | 798 |  | 
| Ezio Melotti | 226231c | 2012-01-18 05:40:00 +0200 | [diff] [blame] | 799 |       Calls :meth:`flush`, sets the target to ``None`` and clears the | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 800 |       buffer. | 
 | 801 |  | 
 | 802 |  | 
 | 803 |    .. method:: flush() | 
 | 804 |  | 
 | 805 |       For a :class:`MemoryHandler`, flushing means just sending the buffered | 
 | 806 |       records to the target, if there is one. The buffer is also cleared when | 
 | 807 |       this happens. Override if you want different behavior. | 
 | 808 |  | 
 | 809 |  | 
 | 810 |    .. method:: setTarget(target) | 
 | 811 |  | 
 | 812 |       Sets the target handler for this handler. | 
 | 813 |  | 
 | 814 |  | 
 | 815 |    .. method:: shouldFlush(record) | 
 | 816 |  | 
 | 817 |       Checks for buffer full or a record at the *flushLevel* or higher. | 
 | 818 |  | 
 | 819 |  | 
 | 820 | .. _http-handler: | 
 | 821 |  | 
 | 822 | HTTPHandler | 
 | 823 | ^^^^^^^^^^^ | 
 | 824 |  | 
 | 825 | The :class:`HTTPHandler` class, located in the :mod:`logging.handlers` module, | 
 | 826 | supports sending logging messages to a Web server, using either ``GET`` or | 
 | 827 | ``POST`` semantics. | 
 | 828 |  | 
 | 829 |  | 
 | 830 | .. class:: HTTPHandler(host, url, method='GET', secure=False, credentials=None) | 
 | 831 |  | 
 | 832 |    Returns a new instance of the :class:`HTTPHandler` class. The *host* can be | 
 | 833 |    of the form ``host:port``, should you need to use a specific port number. | 
 | 834 |    If no *method* is specified, ``GET`` is used. If *secure* is True, an HTTPS | 
 | 835 |    connection will be used. If *credentials* is specified, it should be a | 
 | 836 |    2-tuple consisting of userid and password, which will be placed in an HTTP | 
 | 837 |    'Authorization' header using Basic authentication. If you specify | 
 | 838 |    credentials, you should also specify secure=True so that your userid and | 
 | 839 |    password are not passed in cleartext across the wire. | 
 | 840 |  | 
 | 841 |  | 
 | 842 |    .. method:: emit(record) | 
 | 843 |  | 
 | 844 |       Sends the record to the Web server as a percent-encoded dictionary. | 
 | 845 |  | 
 | 846 |  | 
 | 847 | .. _queue-handler: | 
 | 848 |  | 
 | 849 |  | 
 | 850 | QueueHandler | 
 | 851 | ^^^^^^^^^^^^ | 
 | 852 |  | 
 | 853 | .. versionadded:: 3.2 | 
 | 854 |  | 
 | 855 | The :class:`QueueHandler` class, located in the :mod:`logging.handlers` module, | 
 | 856 | supports sending logging messages to a queue, such as those implemented in the | 
 | 857 | :mod:`queue` or :mod:`multiprocessing` modules. | 
 | 858 |  | 
 | 859 | Along with the :class:`QueueListener` class, :class:`QueueHandler` can be used | 
 | 860 | to let handlers do their work on a separate thread from the one which does the | 
 | 861 | logging. This is important in Web applications and also other service | 
 | 862 | applications where threads servicing clients need to respond as quickly as | 
 | 863 | possible, while any potentially slow operations (such as sending an email via | 
 | 864 | :class:`SMTPHandler`) are done on a separate thread. | 
 | 865 |  | 
 | 866 | .. class:: QueueHandler(queue) | 
 | 867 |  | 
 | 868 |    Returns a new instance of the :class:`QueueHandler` class. The instance is | 
 | 869 |    initialized with the queue to send messages to. The queue can be any queue- | 
 | 870 |    like object; it's used as-is by the :meth:`enqueue` method, which needs | 
 | 871 |    to know how to send messages to it. | 
 | 872 |  | 
 | 873 |  | 
 | 874 |    .. method:: emit(record) | 
 | 875 |  | 
 | 876 |       Enqueues the result of preparing the LogRecord. | 
 | 877 |  | 
 | 878 |    .. method:: prepare(record) | 
 | 879 |  | 
 | 880 |       Prepares a record for queuing. The object returned by this | 
 | 881 |       method is enqueued. | 
 | 882 |  | 
 | 883 |       The base implementation formats the record to merge the message | 
 | 884 |       and arguments, and removes unpickleable items from the record | 
 | 885 |       in-place. | 
 | 886 |  | 
 | 887 |       You might want to override this method if you want to convert | 
 | 888 |       the record to a dict or JSON string, or send a modified copy | 
 | 889 |       of the record while leaving the original intact. | 
 | 890 |  | 
 | 891 |    .. method:: enqueue(record) | 
 | 892 |  | 
 | 893 |       Enqueues the record on the queue using ``put_nowait()``; you may | 
 | 894 |       want to override this if you want to use blocking behaviour, or a | 
 | 895 |       timeout, or a customised queue implementation. | 
 | 896 |  | 
 | 897 |  | 
 | 898 |  | 
| Éric Araujo | 5eada94 | 2011-08-19 00:41:23 +0200 | [diff] [blame] | 899 | .. _queue-listener: | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 900 |  | 
 | 901 | QueueListener | 
 | 902 | ^^^^^^^^^^^^^ | 
 | 903 |  | 
 | 904 | .. versionadded:: 3.2 | 
 | 905 |  | 
 | 906 | The :class:`QueueListener` class, located in the :mod:`logging.handlers` | 
 | 907 | module, supports receiving logging messages from a queue, such as those | 
 | 908 | implemented in the :mod:`queue` or :mod:`multiprocessing` modules. The | 
 | 909 | messages are received from a queue in an internal thread and passed, on | 
 | 910 | the same thread, to one or more handlers for processing. While | 
 | 911 | :class:`QueueListener` is not itself a handler, it is documented here | 
 | 912 | because it works hand-in-hand with :class:`QueueHandler`. | 
 | 913 |  | 
 | 914 | Along with the :class:`QueueHandler` class, :class:`QueueListener` can be used | 
 | 915 | to let handlers do their work on a separate thread from the one which does the | 
 | 916 | logging. This is important in Web applications and also other service | 
 | 917 | applications where threads servicing clients need to respond as quickly as | 
 | 918 | possible, while any potentially slow operations (such as sending an email via | 
 | 919 | :class:`SMTPHandler`) are done on a separate thread. | 
 | 920 |  | 
 | 921 | .. class:: QueueListener(queue, *handlers) | 
 | 922 |  | 
 | 923 |    Returns a new instance of the :class:`QueueListener` class. The instance is | 
 | 924 |    initialized with the queue to send messages to and a list of handlers which | 
 | 925 |    will handle entries placed on the queue. The queue can be any queue- | 
 | 926 |    like object; it's passed as-is to the :meth:`dequeue` method, which needs | 
 | 927 |    to know how to get messages from it. | 
 | 928 |  | 
 | 929 |    .. method:: dequeue(block) | 
 | 930 |  | 
 | 931 |       Dequeues a record and return it, optionally blocking. | 
 | 932 |  | 
 | 933 |       The base implementation uses ``get()``. You may want to override this | 
 | 934 |       method if you want to use timeouts or work with custom queue | 
 | 935 |       implementations. | 
 | 936 |  | 
 | 937 |    .. method:: prepare(record) | 
 | 938 |  | 
 | 939 |       Prepare a record for handling. | 
 | 940 |  | 
 | 941 |       This implementation just returns the passed-in record. You may want to | 
 | 942 |       override this method if you need to do any custom marshalling or | 
 | 943 |       manipulation of the record before passing it to the handlers. | 
 | 944 |  | 
 | 945 |    .. method:: handle(record) | 
 | 946 |  | 
 | 947 |       Handle a record. | 
 | 948 |  | 
 | 949 |       This just loops through the handlers offering them the record | 
 | 950 |       to handle. The actual object passed to the handlers is that which | 
 | 951 |       is returned from :meth:`prepare`. | 
 | 952 |  | 
 | 953 |    .. method:: start() | 
 | 954 |  | 
 | 955 |       Starts the listener. | 
 | 956 |  | 
 | 957 |       This starts up a background thread to monitor the queue for | 
 | 958 |       LogRecords to process. | 
 | 959 |  | 
 | 960 |    .. method:: stop() | 
 | 961 |  | 
 | 962 |       Stops the listener. | 
 | 963 |  | 
 | 964 |       This asks the thread to terminate, and then waits for it to do so. | 
 | 965 |       Note that if you don't call this before your application exits, there | 
 | 966 |       may be some records still left on the queue, which won't be processed. | 
 | 967 |  | 
| Vinay Sajip | a29a9dd | 2011-02-25 16:05:26 +0000 | [diff] [blame] | 968 |    .. method:: enqueue_sentinel() | 
 | 969 |  | 
 | 970 |       Writes a sentinel to the queue to tell the listener to quit. This | 
 | 971 |       implementation uses ``put_nowait()``.  You may want to override this | 
 | 972 |       method if you want to use timeouts or work with custom queue | 
 | 973 |       implementations. | 
 | 974 |  | 
 | 975 |       .. versionadded:: 3.3 | 
 | 976 |  | 
| Vinay Sajip | c63619b | 2010-12-19 12:56:57 +0000 | [diff] [blame] | 977 |  | 
 | 978 | .. seealso:: | 
 | 979 |  | 
 | 980 |    Module :mod:`logging` | 
 | 981 |       API reference for the logging module. | 
 | 982 |  | 
 | 983 |    Module :mod:`logging.config` | 
 | 984 |       Configuration API for the logging module. | 
 | 985 |  | 
 | 986 |  |