blob: a5b181ee612d5fd9489a3b53ff6ad3a2dd3d919d [file] [log] [blame]
Vinay Sajipc63619b2010-12-19 12:56:57 +00001:mod:`logging.handlers` --- Logging handlers
2============================================
3
4.. module:: logging.handlers
5 :synopsis: Handlers for the logging module.
6
Vinay Sajipc63619b2010-12-19 12:56:57 +00007.. moduleauthor:: Vinay Sajip <vinay_sajip@red-dove.com>
8.. sectionauthor:: Vinay Sajip <vinay_sajip@red-dove.com>
9
Terry Jan Reedyfa089b92016-06-11 15:02:54 -040010**Source code:** :source:`Lib/logging/handlers.py`
11
Vinay Sajip01094e12010-12-19 13:41:26 +000012.. sidebar:: Important
13
14 This page contains only reference information. For tutorials,
15 please see
16
17 * :ref:`Basic Tutorial <logging-basic-tutorial>`
18 * :ref:`Advanced Tutorial <logging-advanced-tutorial>`
19 * :ref:`Logging Cookbook <logging-cookbook>`
Vinay Sajipc63619b2010-12-19 12:56:57 +000020
Vinay Sajip31b862d2013-09-05 23:01:07 +010021--------------
22
Vinay Sajipc63619b2010-12-19 12:56:57 +000023.. currentmodule:: logging
24
Vinay Sajip01094e12010-12-19 13:41:26 +000025The following useful handlers are provided in the package. Note that three of
26the handlers (:class:`StreamHandler`, :class:`FileHandler` and
27:class:`NullHandler`) are actually defined in the :mod:`logging` module itself,
28but have been documented here along with the other handlers.
29
Vinay Sajipc63619b2010-12-19 12:56:57 +000030.. _stream-handler:
31
32StreamHandler
33^^^^^^^^^^^^^
34
35The :class:`StreamHandler` class, located in the core :mod:`logging` package,
36sends logging output to streams such as *sys.stdout*, *sys.stderr* or any
37file-like object (or, more precisely, any object which supports :meth:`write`
38and :meth:`flush` methods).
39
40
41.. class:: StreamHandler(stream=None)
42
43 Returns a new instance of the :class:`StreamHandler` class. If *stream* is
44 specified, the instance will use it for logging output; otherwise, *sys.stderr*
45 will be used.
46
47
48 .. method:: emit(record)
49
50 If a formatter is specified, it is used to format the record. The record
Andre Delfino3e658302019-06-29 18:59:49 -030051 is then written to the stream followed by :attr:`terminator`. If exception information
Vinay Sajip689b68a2010-12-22 15:04:15 +000052 is present, it is formatted using :func:`traceback.print_exception` and
53 appended to the stream.
Vinay Sajipc63619b2010-12-19 12:56:57 +000054
55
56 .. method:: flush()
57
58 Flushes the stream by calling its :meth:`flush` method. Note that the
Vinay Sajip67f39772013-08-17 00:39:42 +010059 :meth:`close` method is inherited from :class:`~logging.Handler` and so
60 does no output, so an explicit :meth:`flush` call may be needed at times.
Vinay Sajipc63619b2010-12-19 12:56:57 +000061
Vinay Sajip2543f502017-07-30 10:41:45 +010062 .. method:: setStream(stream)
63
64 Sets the instance's stream to the specified value, if it is different.
65 The old stream is flushed before the new stream is set.
66
67 :param stream: The stream that the handler should use.
68
69 :return: the old stream, if the stream was changed, or *None* if it wasn't.
70
Andre Delfino18a2fc62019-06-29 18:57:39 -030071 .. versionadded:: 3.7
Vinay Sajip2543f502017-07-30 10:41:45 +010072
Andre Delfino3e658302019-06-29 18:59:49 -030073 .. attribute:: terminator
Vinay Sajip2543f502017-07-30 10:41:45 +010074
Andre Delfino3e658302019-06-29 18:59:49 -030075 String used as the terminator when writing a formatted record to a stream.
76 Default value is ``'\n'``.
77
78 If you don't want a newline termination, you can set the handler instance's
79 ``terminator`` attribute to the empty string.
80
81 In earlier versions, the terminator was hardcoded as ``'\n'``.
82
83 .. versionadded:: 3.2
Vinay Sajipc63619b2010-12-19 12:56:57 +000084
Vinay Sajip2543f502017-07-30 10:41:45 +010085
Vinay Sajipc63619b2010-12-19 12:56:57 +000086.. _file-handler:
87
88FileHandler
89^^^^^^^^^^^
90
91The :class:`FileHandler` class, located in the core :mod:`logging` package,
92sends logging output to a disk file. It inherits the output functionality from
93:class:`StreamHandler`.
94
95
Vinay Sajipca7b5042019-06-17 17:40:52 +010096.. class:: FileHandler(filename, mode='a', encoding=None, delay=False, errors=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +000097
98 Returns a new instance of the :class:`FileHandler` class. The specified file is
99 opened and used as the stream for logging. If *mode* is not specified,
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300100 :const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file
Vinay Sajipc63619b2010-12-19 12:56:57 +0000101 with that encoding. If *delay* is true, then file opening is deferred until the
Vinay Sajipca7b5042019-06-17 17:40:52 +0100102 first call to :meth:`emit`. By default, the file grows indefinitely. If
103 *errors* is specified, it's used to determine how encoding errors are handled.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000104
Vinay Sajip638e6222016-07-22 18:23:04 +0100105 .. versionchanged:: 3.6
106 As well as string values, :class:`~pathlib.Path` objects are also accepted
107 for the *filename* argument.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000108
Vinay Sajipca7b5042019-06-17 17:40:52 +0100109 .. versionchanged:: 3.9
110 The *errors* parameter was added.
111
Vinay Sajipc63619b2010-12-19 12:56:57 +0000112 .. method:: close()
113
114 Closes the file.
115
Vinay Sajipc63619b2010-12-19 12:56:57 +0000116 .. method:: emit(record)
117
118 Outputs the record to the file.
119
Miss Islington (bot)e35430b2022-01-07 14:15:25 -0800120 Note that if the file was closed due to logging shutdown at exit and the file
121 mode is 'w', the record will not be emitted (see :issue:`42378`).
122
Vinay Sajipc63619b2010-12-19 12:56:57 +0000123
124.. _null-handler:
125
126NullHandler
127^^^^^^^^^^^
128
129.. versionadded:: 3.1
130
131The :class:`NullHandler` class, located in the core :mod:`logging` package,
132does not do any formatting or output. It is essentially a 'no-op' handler
133for use by library developers.
134
135.. class:: NullHandler()
136
137 Returns a new instance of the :class:`NullHandler` class.
138
139 .. method:: emit(record)
140
141 This method does nothing.
142
143 .. method:: handle(record)
144
145 This method does nothing.
146
147 .. method:: createLock()
148
149 This method returns ``None`` for the lock, since there is no
150 underlying I/O to which access needs to be serialized.
151
152
153See :ref:`library-config` for more information on how to use
154:class:`NullHandler`.
155
156.. _watched-file-handler:
157
158WatchedFileHandler
159^^^^^^^^^^^^^^^^^^
160
161.. currentmodule:: logging.handlers
162
163The :class:`WatchedFileHandler` class, located in the :mod:`logging.handlers`
164module, is a :class:`FileHandler` which watches the file it is logging to. If
165the file changes, it is closed and reopened using the file name.
166
167A file change can happen because of usage of programs such as *newsyslog* and
168*logrotate* which perform log file rotation. This handler, intended for use
169under Unix/Linux, watches the file to see if it has changed since the last emit.
170(A file is deemed to have changed if its device or inode have changed.) If the
171file has changed, the old file stream is closed, and the file opened to get a
172new stream.
173
174This handler is not appropriate for use under Windows, because under Windows
175open log files cannot be moved or renamed - logging opens the files with
176exclusive locks - and so there is no need for such a handler. Furthermore,
Vinay Sajip67f39772013-08-17 00:39:42 +0100177*ST_INO* is not supported under Windows; :func:`~os.stat` always returns zero
178for this value.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000179
180
Vinay Sajipca7b5042019-06-17 17:40:52 +0100181.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False, errors=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000182
183 Returns a new instance of the :class:`WatchedFileHandler` class. The specified
184 file is opened and used as the stream for logging. If *mode* is not specified,
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300185 :const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file
Vinay Sajipc63619b2010-12-19 12:56:57 +0000186 with that encoding. If *delay* is true, then file opening is deferred until the
Vinay Sajipca7b5042019-06-17 17:40:52 +0100187 first call to :meth:`emit`. By default, the file grows indefinitely. If
188 *errors* is provided, it determines how encoding errors are handled.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000189
Vinay Sajip638e6222016-07-22 18:23:04 +0100190 .. versionchanged:: 3.6
191 As well as string values, :class:`~pathlib.Path` objects are also accepted
192 for the *filename* argument.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000193
Vinay Sajipca7b5042019-06-17 17:40:52 +0100194 .. versionchanged:: 3.9
195 The *errors* parameter was added.
196
Vinay Sajip29a14452015-10-01 20:54:41 +0100197 .. method:: reopenIfNeeded()
198
199 Checks to see if the file has changed. If it has, the existing stream is
200 flushed and closed and the file opened again, typically as a precursor to
201 outputting the record to the file.
202
Berker Peksag6f038ad2015-10-07 07:54:23 +0300203 .. versionadded:: 3.6
204
Vinay Sajip29a14452015-10-01 20:54:41 +0100205
Vinay Sajipc63619b2010-12-19 12:56:57 +0000206 .. method:: emit(record)
207
Vinay Sajip29a14452015-10-01 20:54:41 +0100208 Outputs the record to the file, but first calls :meth:`reopenIfNeeded` to
209 reopen the file if it has changed.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000210
Vinay Sajip23b94d02012-01-04 12:02:26 +0000211.. _base-rotating-handler:
212
213BaseRotatingHandler
214^^^^^^^^^^^^^^^^^^^
215
216The :class:`BaseRotatingHandler` class, located in the :mod:`logging.handlers`
217module, is the base class for the rotating file handlers,
218:class:`RotatingFileHandler` and :class:`TimedRotatingFileHandler`. You should
219not need to instantiate this class, but it has attributes and methods you may
220need to override.
221
Vinay Sajipca7b5042019-06-17 17:40:52 +0100222.. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False, errors=None)
Vinay Sajip23b94d02012-01-04 12:02:26 +0000223
224 The parameters are as for :class:`FileHandler`. The attributes are:
225
226 .. attribute:: namer
227
228 If this attribute is set to a callable, the :meth:`rotation_filename`
229 method delegates to this callable. The parameters passed to the callable
230 are those passed to :meth:`rotation_filename`.
231
232 .. note:: The namer function is called quite a few times during rollover,
233 so it should be as simple and as fast as possible. It should also
234 return the same output every time for a given input, otherwise the
235 rollover behaviour may not work as expected.
236
Miss Islington (bot)f84e2f62021-12-13 17:17:56 -0800237 It's also worth noting that care should be taken when using a namer to
238 preserve certain attributes in the filename which are used during rotation.
239 For example, :class:`RotatingFileHandler` expects to have a set of log files
240 whose names contain successive integers, so that rotation works as expected,
241 and :class:`TimedRotatingFileHandler` deletes old log files (based on the
242 ``backupCount`` parameter passed to the handler's initializer) by determining
243 the oldest files to delete. For this to happen, the filenames should be
244 sortable using the date/time portion of the filename, and a namer needs to
245 respect this. (If a namer is wanted that doesn't respect this scheme, it will
246 need to be used in a subclass of :class:`TimedRotatingFileHandler` which
247 overrides the :meth:`~TimedRotatingFileHandler.getFilesToDelete` method to
248 fit in with the custom naming scheme.)
249
Vinay Sajip23b94d02012-01-04 12:02:26 +0000250 .. versionadded:: 3.3
251
252
253 .. attribute:: BaseRotatingHandler.rotator
254
255 If this attribute is set to a callable, the :meth:`rotate` method
256 delegates to this callable. The parameters passed to the callable are
257 those passed to :meth:`rotate`.
258
259 .. versionadded:: 3.3
260
261 .. method:: BaseRotatingHandler.rotation_filename(default_name)
262
263 Modify the filename of a log file when rotating.
264
265 This is provided so that a custom filename can be provided.
266
267 The default implementation calls the 'namer' attribute of the handler,
268 if it's callable, passing the default name to it. If the attribute isn't
Ezio Melotti226231c2012-01-18 05:40:00 +0200269 callable (the default is ``None``), the name is returned unchanged.
Vinay Sajip23b94d02012-01-04 12:02:26 +0000270
271 :param default_name: The default name for the log file.
272
273 .. versionadded:: 3.3
274
275
276 .. method:: BaseRotatingHandler.rotate(source, dest)
277
278 When rotating, rotate the current log.
279
280 The default implementation calls the 'rotator' attribute of the handler,
281 if it's callable, passing the source and dest arguments to it. If the
Ezio Melotti226231c2012-01-18 05:40:00 +0200282 attribute isn't callable (the default is ``None``), the source is simply
Vinay Sajip23b94d02012-01-04 12:02:26 +0000283 renamed to the destination.
284
285 :param source: The source filename. This is normally the base
Martin Panterd21e0b52015-10-10 10:36:22 +0000286 filename, e.g. 'test.log'.
Vinay Sajip23b94d02012-01-04 12:02:26 +0000287 :param dest: The destination filename. This is normally
288 what the source is rotated to, e.g. 'test.log.1'.
289
290 .. versionadded:: 3.3
291
292The reason the attributes exist is to save you having to subclass - you can use
293the same callables for instances of :class:`RotatingFileHandler` and
294:class:`TimedRotatingFileHandler`. If either the namer or rotator callable
295raises an exception, this will be handled in the same way as any other
296exception during an :meth:`emit` call, i.e. via the :meth:`handleError` method
297of the handler.
298
299If you need to make more significant changes to rotation processing, you can
300override the methods.
301
302For an example, see :ref:`cookbook-rotator-namer`.
303
304
Vinay Sajipc63619b2010-12-19 12:56:57 +0000305.. _rotating-file-handler:
306
307RotatingFileHandler
308^^^^^^^^^^^^^^^^^^^
309
310The :class:`RotatingFileHandler` class, located in the :mod:`logging.handlers`
311module, supports rotation of disk log files.
312
313
Vinay Sajipca7b5042019-06-17 17:40:52 +0100314.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False, errors=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000315
316 Returns a new instance of the :class:`RotatingFileHandler` class. The specified
317 file is opened and used as the stream for logging. If *mode* is not specified,
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300318 ``'a'`` is used. If *encoding* is not ``None``, it is used to open the file
Vinay Sajipc63619b2010-12-19 12:56:57 +0000319 with that encoding. If *delay* is true, then file opening is deferred until the
Vinay Sajipca7b5042019-06-17 17:40:52 +0100320 first call to :meth:`emit`. By default, the file grows indefinitely. If
321 *errors* is provided, it determines how encoding errors are handled.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000322
323 You can use the *maxBytes* and *backupCount* values to allow the file to
324 :dfn:`rollover` at a predetermined size. When the size is about to be exceeded,
325 the file is closed and a new file is silently opened for output. Rollover occurs
Vinay Sajip53a21eb2016-12-31 11:06:57 +0000326 whenever the current log file is nearly *maxBytes* in length; but if either of
327 *maxBytes* or *backupCount* is zero, rollover never occurs, so you generally want
328 to set *backupCount* to at least 1, and have a non-zero *maxBytes*.
329 When *backupCount* is non-zero, the system will save old log files by appending
330 the extensions '.1', '.2' etc., to the filename. For example, with a *backupCount*
331 of 5 and a base file name of :file:`app.log`, you would get :file:`app.log`,
Vinay Sajipff37cfe2015-01-23 21:19:04 +0000332 :file:`app.log.1`, :file:`app.log.2`, up to :file:`app.log.5`. The file being
333 written to is always :file:`app.log`. When this file is filled, it is closed
334 and renamed to :file:`app.log.1`, and if files :file:`app.log.1`,
Vinay Sajip53a21eb2016-12-31 11:06:57 +0000335 :file:`app.log.2`, etc. exist, then they are renamed to :file:`app.log.2`,
336 :file:`app.log.3` etc. respectively.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000337
Vinay Sajip638e6222016-07-22 18:23:04 +0100338 .. versionchanged:: 3.6
339 As well as string values, :class:`~pathlib.Path` objects are also accepted
340 for the *filename* argument.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000341
Vinay Sajipca7b5042019-06-17 17:40:52 +0100342 .. versionchanged:: 3.9
343 The *errors* parameter was added.
344
Vinay Sajipc63619b2010-12-19 12:56:57 +0000345 .. method:: doRollover()
346
347 Does a rollover, as described above.
348
349
350 .. method:: emit(record)
351
352 Outputs the record to the file, catering for rollover as described
353 previously.
354
355.. _timed-rotating-file-handler:
356
357TimedRotatingFileHandler
358^^^^^^^^^^^^^^^^^^^^^^^^
359
360The :class:`TimedRotatingFileHandler` class, located in the
361:mod:`logging.handlers` module, supports rotation of disk log files at certain
362timed intervals.
363
364
Vinay Sajipca7b5042019-06-17 17:40:52 +0100365.. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None, errors=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000366
367 Returns a new instance of the :class:`TimedRotatingFileHandler` class. The
368 specified file is opened and used as the stream for logging. On rotating it also
369 sets the filename suffix. Rotating happens based on the product of *when* and
370 *interval*.
371
372 You can use the *when* to specify the type of *interval*. The list of possible
373 values is below. Note that they are not case sensitive.
374
Vinay Sajipdd308302016-08-24 17:49:15 +0100375 +----------------+----------------------------+-------------------------+
376 | Value | Type of interval | If/how *atTime* is used |
377 +================+============================+=========================+
378 | ``'S'`` | Seconds | Ignored |
379 +----------------+----------------------------+-------------------------+
380 | ``'M'`` | Minutes | Ignored |
381 +----------------+----------------------------+-------------------------+
382 | ``'H'`` | Hours | Ignored |
383 +----------------+----------------------------+-------------------------+
384 | ``'D'`` | Days | Ignored |
385 +----------------+----------------------------+-------------------------+
386 | ``'W0'-'W6'`` | Weekday (0=Monday) | Used to compute initial |
387 | | | rollover time |
388 +----------------+----------------------------+-------------------------+
389 | ``'midnight'`` | Roll over at midnight, if | Used to compute initial |
390 | | *atTime* not specified, | rollover time |
391 | | else at time *atTime* | |
392 +----------------+----------------------------+-------------------------+
Vinay Sajipc63619b2010-12-19 12:56:57 +0000393
Vinay Sajip832d99b2013-03-08 23:24:30 +0000394 When using weekday-based rotation, specify 'W0' for Monday, 'W1' for
395 Tuesday, and so on up to 'W6' for Sunday. In this case, the value passed for
396 *interval* isn't used.
397
Vinay Sajipc63619b2010-12-19 12:56:57 +0000398 The system will save old log files by appending extensions to the filename.
399 The extensions are date-and-time based, using the strftime format
400 ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the
401 rollover interval.
402
403 When computing the next rollover time for the first time (when the handler
404 is created), the last modification time of an existing log file, or else
405 the current time, is used to compute when the next rotation will occur.
406
407 If the *utc* argument is true, times in UTC will be used; otherwise
408 local time is used.
409
410 If *backupCount* is nonzero, at most *backupCount* files
411 will be kept, and if more would be created when rollover occurs, the oldest
412 one is deleted. The deletion logic uses the interval to determine which
413 files to delete, so changing the interval may leave old files lying around.
414
415 If *delay* is true, then file opening is deferred until the first call to
416 :meth:`emit`.
417
Vinay Sajipa7130792013-04-12 17:04:23 +0100418 If *atTime* is not ``None``, it must be a ``datetime.time`` instance which
419 specifies the time of day when rollover occurs, for the cases where rollover
Vinay Sajipdd308302016-08-24 17:49:15 +0100420 is set to happen "at midnight" or "on a particular weekday". Note that in
421 these cases, the *atTime* value is effectively used to compute the *initial*
422 rollover, and subsequent rollovers would be calculated via the normal
423 interval calculation.
424
Vinay Sajipca7b5042019-06-17 17:40:52 +0100425 If *errors* is specified, it's used to determine how encoding errors are
426 handled.
427
Vinay Sajipdd308302016-08-24 17:49:15 +0100428 .. note:: Calculation of the initial rollover time is done when the handler
429 is initialised. Calculation of subsequent rollover times is done only
430 when rollover occurs, and rollover occurs only when emitting output. If
431 this is not kept in mind, it might lead to some confusion. For example,
432 if an interval of "every minute" is set, that does not mean you will
433 always see log files with times (in the filename) separated by a minute;
434 if, during application execution, logging output is generated more
435 frequently than once a minute, *then* you can expect to see log files
436 with times separated by a minute. If, on the other hand, logging messages
437 are only output once every five minutes (say), then there will be gaps in
438 the file times corresponding to the minutes where no output (and hence no
439 rollover) occurred.
Vinay Sajipa7130792013-04-12 17:04:23 +0100440
441 .. versionchanged:: 3.4
442 *atTime* parameter was added.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000443
Vinay Sajip638e6222016-07-22 18:23:04 +0100444 .. versionchanged:: 3.6
445 As well as string values, :class:`~pathlib.Path` objects are also accepted
446 for the *filename* argument.
447
Vinay Sajipca7b5042019-06-17 17:40:52 +0100448 .. versionchanged:: 3.9
449 The *errors* parameter was added.
450
Vinay Sajipc63619b2010-12-19 12:56:57 +0000451 .. method:: doRollover()
452
453 Does a rollover, as described above.
454
Vinay Sajipc63619b2010-12-19 12:56:57 +0000455 .. method:: emit(record)
456
457 Outputs the record to the file, catering for rollover as described above.
458
Miss Islington (bot)f84e2f62021-12-13 17:17:56 -0800459 .. method:: getFilesToDelete()
460
461 Returns a list of filenames which should be deleted as part of rollover. These
462 are the absolute paths of the oldest backup log files written by the handler.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000463
464.. _socket-handler:
465
466SocketHandler
467^^^^^^^^^^^^^
468
469The :class:`SocketHandler` class, located in the :mod:`logging.handlers` module,
470sends logging output to a network socket. The base class uses a TCP socket.
471
472
473.. class:: SocketHandler(host, port)
474
475 Returns a new instance of the :class:`SocketHandler` class intended to
476 communicate with a remote machine whose address is given by *host* and *port*.
477
Vinay Sajip5421f352013-09-27 18:18:28 +0100478 .. versionchanged:: 3.4
479 If ``port`` is specified as ``None``, a Unix domain socket is created
480 using the value in ``host`` - otherwise, a TCP socket is created.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000481
482 .. method:: close()
483
484 Closes the socket.
485
486
487 .. method:: emit()
488
489 Pickles the record's attribute dictionary and writes it to the socket in
490 binary format. If there is an error with the socket, silently drops the
491 packet. If the connection was previously lost, re-establishes the
492 connection. To unpickle the record at the receiving end into a
Vinay Sajip67f39772013-08-17 00:39:42 +0100493 :class:`~logging.LogRecord`, use the :func:`~logging.makeLogRecord`
494 function.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000495
496
497 .. method:: handleError()
498
499 Handles an error which has occurred during :meth:`emit`. The most likely
500 cause is a lost connection. Closes the socket so that we can retry on the
501 next event.
502
503
504 .. method:: makeSocket()
505
506 This is a factory method which allows subclasses to define the precise
507 type of socket they want. The default implementation creates a TCP socket
508 (:const:`socket.SOCK_STREAM`).
509
510
511 .. method:: makePickle(record)
512
513 Pickles the record's attribute dictionary in binary format with a length
Vinay Sajipf06b5692019-06-19 15:29:57 +0100514 prefix, and returns it ready for transmission across the socket. The
515 details of this operation are equivalent to::
516
517 data = pickle.dumps(record_attr_dict, 1)
518 datalen = struct.pack('>L', len(data))
519 return datalen + data
Vinay Sajipc63619b2010-12-19 12:56:57 +0000520
521 Note that pickles aren't completely secure. If you are concerned about
522 security, you may want to override this method to implement a more secure
523 mechanism. For example, you can sign pickles using HMAC and then verify
524 them on the receiving end, or alternatively you can disable unpickling of
525 global objects on the receiving end.
526
Georg Brandl08e278a2011-02-15 12:44:43 +0000527
Vinay Sajipc63619b2010-12-19 12:56:57 +0000528 .. method:: send(packet)
529
Vinay Sajipf06b5692019-06-19 15:29:57 +0100530 Send a pickled byte-string *packet* to the socket. The format of the sent
531 byte-string is as described in the documentation for
532 :meth:`~SocketHandler.makePickle`.
533
534 This function allows for partial sends, which can happen when the network
535 is busy.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000536
Georg Brandl08e278a2011-02-15 12:44:43 +0000537
Georg Brandldbb95852011-02-15 12:41:17 +0000538 .. method:: createSocket()
539
540 Tries to create a socket; on failure, uses an exponential back-off
Donald Stufft8b852f12014-05-20 12:58:38 -0400541 algorithm. On initial failure, the handler will drop the message it was
Georg Brandldbb95852011-02-15 12:41:17 +0000542 trying to send. When subsequent messages are handled by the same
543 instance, it will not try connecting until some time has passed. The
544 default parameters are such that the initial delay is one second, and if
545 after that delay the connection still can't be made, the handler will
546 double the delay each time up to a maximum of 30 seconds.
547
548 This behaviour is controlled by the following handler attributes:
549
550 * ``retryStart`` (initial delay, defaulting to 1.0 seconds).
551 * ``retryFactor`` (multiplier, defaulting to 2.0).
552 * ``retryMax`` (maximum delay, defaulting to 30.0 seconds).
553
554 This means that if the remote listener starts up *after* the handler has
555 been used, you could lose messages (since the handler won't even attempt
556 a connection until the delay has elapsed, but just silently drop messages
557 during the delay period).
Georg Brandl08e278a2011-02-15 12:44:43 +0000558
Vinay Sajipc63619b2010-12-19 12:56:57 +0000559
560.. _datagram-handler:
561
562DatagramHandler
563^^^^^^^^^^^^^^^
564
565The :class:`DatagramHandler` class, located in the :mod:`logging.handlers`
566module, inherits from :class:`SocketHandler` to support sending logging messages
567over UDP sockets.
568
569
570.. class:: DatagramHandler(host, port)
571
572 Returns a new instance of the :class:`DatagramHandler` class intended to
573 communicate with a remote machine whose address is given by *host* and *port*.
574
Vinay Sajip5421f352013-09-27 18:18:28 +0100575 .. versionchanged:: 3.4
576 If ``port`` is specified as ``None``, a Unix domain socket is created
Mike DePalatis233de022018-03-30 03:36:06 -0400577 using the value in ``host`` - otherwise, a UDP socket is created.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000578
579 .. method:: emit()
580
581 Pickles the record's attribute dictionary and writes it to the socket in
582 binary format. If there is an error with the socket, silently drops the
583 packet. To unpickle the record at the receiving end into a
Vinay Sajip67f39772013-08-17 00:39:42 +0100584 :class:`~logging.LogRecord`, use the :func:`~logging.makeLogRecord`
585 function.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000586
587
588 .. method:: makeSocket()
589
590 The factory method of :class:`SocketHandler` is here overridden to create
591 a UDP socket (:const:`socket.SOCK_DGRAM`).
592
593
594 .. method:: send(s)
595
Vinay Sajipf06b5692019-06-19 15:29:57 +0100596 Send a pickled byte-string to a socket. The format of the sent byte-string
597 is as described in the documentation for :meth:`SocketHandler.makePickle`.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000598
599
600.. _syslog-handler:
601
602SysLogHandler
603^^^^^^^^^^^^^
604
605The :class:`SysLogHandler` class, located in the :mod:`logging.handlers` module,
606supports sending logging messages to a remote or local Unix syslog.
607
608
609.. class:: SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)
610
611 Returns a new instance of the :class:`SysLogHandler` class intended to
612 communicate with a remote Unix machine whose address is given by *address* in
613 the form of a ``(host, port)`` tuple. If *address* is not specified,
614 ``('localhost', 514)`` is used. The address is used to open a socket. An
615 alternative to providing a ``(host, port)`` tuple is providing an address as a
616 string, for example '/dev/log'. In this case, a Unix domain socket is used to
617 send the message to the syslog. If *facility* is not specified,
618 :const:`LOG_USER` is used. The type of socket opened depends on the
619 *socktype* argument, which defaults to :const:`socket.SOCK_DGRAM` and thus
620 opens a UDP socket. To open a TCP socket (for use with the newer syslog
621 daemons such as rsyslog), specify a value of :const:`socket.SOCK_STREAM`.
622
623 Note that if your server is not listening on UDP port 514,
624 :class:`SysLogHandler` may appear not to work. In that case, check what
625 address you should be using for a domain socket - it's system dependent.
626 For example, on Linux it's usually '/dev/log' but on OS/X it's
627 '/var/run/syslog'. You'll need to check your platform and use the
628 appropriate address (you may need to do this check at runtime if your
629 application needs to run on several platforms). On Windows, you pretty
630 much have to use the UDP option.
631
632 .. versionchanged:: 3.2
633 *socktype* was added.
634
635
636 .. method:: close()
637
638 Closes the socket to the remote host.
639
640
641 .. method:: emit(record)
642
643 The record is formatted, and then sent to the syslog server. If exception
644 information is present, it is *not* sent to the server.
645
Vinay Sajip645e4582011-06-10 18:52:50 +0100646 .. versionchanged:: 3.2.1
647 (See: :issue:`12168`.) In earlier versions, the message sent to the
648 syslog daemons was always terminated with a NUL byte, because early
649 versions of these daemons expected a NUL terminated message - even
Serhiy Storchaka0a36ac12018-05-31 07:39:00 +0300650 though it's not in the relevant specification (:rfc:`5424`). More recent
Vinay Sajip645e4582011-06-10 18:52:50 +0100651 versions of these daemons don't expect the NUL byte but strip it off
652 if it's there, and even more recent daemons (which adhere more closely
653 to RFC 5424) pass the NUL byte on as part of the message.
654
655 To enable easier handling of syslog messages in the face of all these
656 differing daemon behaviours, the appending of the NUL byte has been
657 made configurable, through the use of a class-level attribute,
658 ``append_nul``. This defaults to ``True`` (preserving the existing
659 behaviour) but can be set to ``False`` on a ``SysLogHandler`` instance
660 in order for that instance to *not* append the NUL terminator.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000661
Vinay Sajip2353e352011-06-27 15:40:06 +0100662 .. versionchanged:: 3.3
663 (See: :issue:`12419`.) In earlier versions, there was no facility for
664 an "ident" or "tag" prefix to identify the source of the message. This
665 can now be specified using a class-level attribute, defaulting to
666 ``""`` to preserve existing behaviour, but which can be overridden on
667 a ``SysLogHandler`` instance in order for that instance to prepend
668 the ident to every message handled. Note that the provided ident must
669 be text, not bytes, and is prepended to the message exactly as is.
670
Vinay Sajipc63619b2010-12-19 12:56:57 +0000671 .. method:: encodePriority(facility, priority)
672
673 Encodes the facility and priority into an integer. You can pass in strings
674 or integers - if strings are passed, internal mapping dictionaries are
675 used to convert them to integers.
676
677 The symbolic ``LOG_`` values are defined in :class:`SysLogHandler` and
678 mirror the values defined in the ``sys/syslog.h`` header file.
679
680 **Priorities**
681
682 +--------------------------+---------------+
683 | Name (string) | Symbolic value|
684 +==========================+===============+
685 | ``alert`` | LOG_ALERT |
686 +--------------------------+---------------+
687 | ``crit`` or ``critical`` | LOG_CRIT |
688 +--------------------------+---------------+
689 | ``debug`` | LOG_DEBUG |
690 +--------------------------+---------------+
691 | ``emerg`` or ``panic`` | LOG_EMERG |
692 +--------------------------+---------------+
693 | ``err`` or ``error`` | LOG_ERR |
694 +--------------------------+---------------+
695 | ``info`` | LOG_INFO |
696 +--------------------------+---------------+
697 | ``notice`` | LOG_NOTICE |
698 +--------------------------+---------------+
699 | ``warn`` or ``warning`` | LOG_WARNING |
700 +--------------------------+---------------+
701
702 **Facilities**
703
704 +---------------+---------------+
705 | Name (string) | Symbolic value|
706 +===============+===============+
707 | ``auth`` | LOG_AUTH |
708 +---------------+---------------+
709 | ``authpriv`` | LOG_AUTHPRIV |
710 +---------------+---------------+
711 | ``cron`` | LOG_CRON |
712 +---------------+---------------+
713 | ``daemon`` | LOG_DAEMON |
714 +---------------+---------------+
715 | ``ftp`` | LOG_FTP |
716 +---------------+---------------+
717 | ``kern`` | LOG_KERN |
718 +---------------+---------------+
719 | ``lpr`` | LOG_LPR |
720 +---------------+---------------+
721 | ``mail`` | LOG_MAIL |
722 +---------------+---------------+
723 | ``news`` | LOG_NEWS |
724 +---------------+---------------+
725 | ``syslog`` | LOG_SYSLOG |
726 +---------------+---------------+
727 | ``user`` | LOG_USER |
728 +---------------+---------------+
729 | ``uucp`` | LOG_UUCP |
730 +---------------+---------------+
731 | ``local0`` | LOG_LOCAL0 |
732 +---------------+---------------+
733 | ``local1`` | LOG_LOCAL1 |
734 +---------------+---------------+
735 | ``local2`` | LOG_LOCAL2 |
736 +---------------+---------------+
737 | ``local3`` | LOG_LOCAL3 |
738 +---------------+---------------+
739 | ``local4`` | LOG_LOCAL4 |
740 +---------------+---------------+
741 | ``local5`` | LOG_LOCAL5 |
742 +---------------+---------------+
743 | ``local6`` | LOG_LOCAL6 |
744 +---------------+---------------+
745 | ``local7`` | LOG_LOCAL7 |
746 +---------------+---------------+
747
748 .. method:: mapPriority(levelname)
749
750 Maps a logging level name to a syslog priority name.
751 You may need to override this if you are using custom levels, or
752 if the default algorithm is not suitable for your needs. The
753 default algorithm maps ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` and
754 ``CRITICAL`` to the equivalent syslog names, and all other level
755 names to 'warning'.
756
757.. _nt-eventlog-handler:
758
759NTEventLogHandler
760^^^^^^^^^^^^^^^^^
761
762The :class:`NTEventLogHandler` class, located in the :mod:`logging.handlers`
763module, supports sending logging messages to a local Windows NT, Windows 2000 or
764Windows XP event log. Before you can use it, you need Mark Hammond's Win32
765extensions for Python installed.
766
767
768.. class:: NTEventLogHandler(appname, dllname=None, logtype='Application')
769
770 Returns a new instance of the :class:`NTEventLogHandler` class. The *appname* is
771 used to define the application name as it appears in the event log. An
772 appropriate registry entry is created using this name. The *dllname* should give
773 the fully qualified pathname of a .dll or .exe which contains message
774 definitions to hold in the log (if not specified, ``'win32service.pyd'`` is used
775 - this is installed with the Win32 extensions and contains some basic
776 placeholder message definitions. Note that use of these placeholders will make
777 your event logs big, as the entire message source is held in the log. If you
778 want slimmer logs, you have to pass in the name of your own .dll or .exe which
779 contains the message definitions you want to use in the event log). The
780 *logtype* is one of ``'Application'``, ``'System'`` or ``'Security'``, and
781 defaults to ``'Application'``.
782
783
784 .. method:: close()
785
786 At this point, you can remove the application name from the registry as a
787 source of event log entries. However, if you do this, you will not be able
788 to see the events as you intended in the Event Log Viewer - it needs to be
789 able to access the registry to get the .dll name. The current version does
790 not do this.
791
792
793 .. method:: emit(record)
794
795 Determines the message ID, event category and event type, and then logs
796 the message in the NT event log.
797
798
799 .. method:: getEventCategory(record)
800
801 Returns the event category for the record. Override this if you want to
802 specify your own categories. This version returns 0.
803
804
805 .. method:: getEventType(record)
806
807 Returns the event type for the record. Override this if you want to
808 specify your own types. This version does a mapping using the handler's
809 typemap attribute, which is set up in :meth:`__init__` to a dictionary
810 which contains mappings for :const:`DEBUG`, :const:`INFO`,
811 :const:`WARNING`, :const:`ERROR` and :const:`CRITICAL`. If you are using
812 your own levels, you will either need to override this method or place a
813 suitable dictionary in the handler's *typemap* attribute.
814
815
816 .. method:: getMessageID(record)
817
818 Returns the message ID for the record. If you are using your own messages,
819 you could do this by having the *msg* passed to the logger being an ID
820 rather than a format string. Then, in here, you could use a dictionary
821 lookup to get the message ID. This version returns 1, which is the base
822 message ID in :file:`win32service.pyd`.
823
824.. _smtp-handler:
825
826SMTPHandler
827^^^^^^^^^^^
828
829The :class:`SMTPHandler` class, located in the :mod:`logging.handlers` module,
830supports sending logging messages to an email address via SMTP.
831
832
Vinay Sajip38a12af2012-03-26 17:17:39 +0100833.. class:: SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000834
835 Returns a new instance of the :class:`SMTPHandler` class. The instance is
836 initialized with the from and to addresses and subject line of the email. The
837 *toaddrs* should be a list of strings. To specify a non-standard SMTP port, use
838 the (host, port) tuple format for the *mailhost* argument. If you use a string,
839 the standard SMTP port is used. If your SMTP server requires authentication, you
840 can specify a (username, password) tuple for the *credentials* argument.
841
Vinay Sajip95259562011-08-01 11:31:52 +0100842 To specify the use of a secure protocol (TLS), pass in a tuple to the
843 *secure* argument. This will only be used when authentication credentials are
844 supplied. The tuple should be either an empty tuple, or a single-value tuple
845 with the name of a keyfile, or a 2-value tuple with the names of the keyfile
846 and certificate file. (This tuple is passed to the
847 :meth:`smtplib.SMTP.starttls` method.)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000848
Vinay Sajip38a12af2012-03-26 17:17:39 +0100849 A timeout can be specified for communication with the SMTP server using the
850 *timeout* argument.
851
852 .. versionadded:: 3.3
853 The *timeout* argument was added.
854
Vinay Sajipc63619b2010-12-19 12:56:57 +0000855 .. method:: emit(record)
856
857 Formats the record and sends it to the specified addressees.
858
859
860 .. method:: getSubject(record)
861
862 If you want to specify a subject line which is record-dependent, override
863 this method.
864
865.. _memory-handler:
866
867MemoryHandler
868^^^^^^^^^^^^^
869
870The :class:`MemoryHandler` class, located in the :mod:`logging.handlers` module,
871supports buffering of logging records in memory, periodically flushing them to a
872:dfn:`target` handler. Flushing occurs whenever the buffer is full, or when an
873event of a certain severity or greater is seen.
874
875:class:`MemoryHandler` is a subclass of the more general
876:class:`BufferingHandler`, which is an abstract class. This buffers logging
877records in memory. Whenever each record is added to the buffer, a check is made
878by calling :meth:`shouldFlush` to see if the buffer should be flushed. If it
Vinay Sajip8ece80f2012-03-26 17:09:58 +0100879should, then :meth:`flush` is expected to do the flushing.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000880
881
882.. class:: BufferingHandler(capacity)
883
Vinay Sajip84de34e2019-07-01 12:41:21 +0100884 Initializes the handler with a buffer of the specified capacity. Here,
885 *capacity* means the number of logging records buffered.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000886
887
888 .. method:: emit(record)
889
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200890 Append the record to the buffer. If :meth:`shouldFlush` returns true,
891 call :meth:`flush` to process the buffer.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000892
893
894 .. method:: flush()
895
896 You can override this to implement custom flushing behavior. This version
897 just zaps the buffer to empty.
898
899
900 .. method:: shouldFlush(record)
901
Serhiy Storchaka138ccbb2019-11-12 16:57:03 +0200902 Return ``True`` if the buffer is up to capacity. This method can be
Vinay Sajipc63619b2010-12-19 12:56:57 +0000903 overridden to implement custom flushing strategies.
904
905
Vinay Sajipcccf6062016-07-22 16:27:31 +0100906.. class:: MemoryHandler(capacity, flushLevel=ERROR, target=None, flushOnClose=True)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000907
908 Returns a new instance of the :class:`MemoryHandler` class. The instance is
Vinay Sajip84de34e2019-07-01 12:41:21 +0100909 initialized with a buffer size of *capacity* (number of records buffered).
910 If *flushLevel* is not specified, :const:`ERROR` is used. If no *target* is
911 specified, the target will need to be set using :meth:`setTarget` before this
912 handler does anything useful. If *flushOnClose* is specified as ``False``,
913 then the buffer is *not* flushed when the handler is closed. If not specified
914 or specified as ``True``, the previous behaviour of flushing the buffer will
915 occur when the handler is closed.
Vinay Sajipcccf6062016-07-22 16:27:31 +0100916
917 .. versionchanged:: 3.6
918 The *flushOnClose* parameter was added.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000919
920
921 .. method:: close()
922
Ezio Melotti226231c2012-01-18 05:40:00 +0200923 Calls :meth:`flush`, sets the target to ``None`` and clears the
Vinay Sajipc63619b2010-12-19 12:56:57 +0000924 buffer.
925
926
927 .. method:: flush()
928
929 For a :class:`MemoryHandler`, flushing means just sending the buffered
930 records to the target, if there is one. The buffer is also cleared when
931 this happens. Override if you want different behavior.
932
933
934 .. method:: setTarget(target)
935
936 Sets the target handler for this handler.
937
938
939 .. method:: shouldFlush(record)
940
941 Checks for buffer full or a record at the *flushLevel* or higher.
942
943
944.. _http-handler:
945
946HTTPHandler
947^^^^^^^^^^^
948
949The :class:`HTTPHandler` class, located in the :mod:`logging.handlers` module,
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -0700950supports sending logging messages to a web server, using either ``GET`` or
Vinay Sajipc63619b2010-12-19 12:56:57 +0000951``POST`` semantics.
952
953
Benjamin Peterson43052a12014-11-23 20:36:44 -0600954.. class:: HTTPHandler(host, url, method='GET', secure=False, credentials=None, context=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000955
956 Returns a new instance of the :class:`HTTPHandler` class. The *host* can be
Benjamin Peterson43052a12014-11-23 20:36:44 -0600957 of the form ``host:port``, should you need to use a specific port number. If
958 no *method* is specified, ``GET`` is used. If *secure* is true, a HTTPS
959 connection will be used. The *context* parameter may be set to a
960 :class:`ssl.SSLContext` instance to configure the SSL settings used for the
961 HTTPS connection. If *credentials* is specified, it should be a 2-tuple
962 consisting of userid and password, which will be placed in a HTTP
Vinay Sajipc63619b2010-12-19 12:56:57 +0000963 'Authorization' header using Basic authentication. If you specify
964 credentials, you should also specify secure=True so that your userid and
965 password are not passed in cleartext across the wire.
966
Benjamin Petersona90e92d2014-11-23 20:38:37 -0600967 .. versionchanged:: 3.5
Benjamin Peterson43052a12014-11-23 20:36:44 -0600968 The *context* parameter was added.
969
Vinay Sajipc673a9a2014-05-30 18:59:27 +0100970 .. method:: mapLogRecord(record)
971
972 Provides a dictionary, based on ``record``, which is to be URL-encoded
973 and sent to the web server. The default implementation just returns
974 ``record.__dict__``. This method can be overridden if e.g. only a
975 subset of :class:`~logging.LogRecord` is to be sent to the web server, or
976 if more specific customization of what's sent to the server is required.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000977
978 .. method:: emit(record)
979
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -0700980 Sends the record to the web server as a URL-encoded dictionary. The
Vinay Sajipc673a9a2014-05-30 18:59:27 +0100981 :meth:`mapLogRecord` method is used to convert the record to the
982 dictionary to be sent.
983
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -0700984 .. note:: Since preparing a record for sending it to a web server is not
Vinay Sajipc673a9a2014-05-30 18:59:27 +0100985 the same as a generic formatting operation, using
986 :meth:`~logging.Handler.setFormatter` to specify a
987 :class:`~logging.Formatter` for a :class:`HTTPHandler` has no effect.
988 Instead of calling :meth:`~logging.Handler.format`, this handler calls
989 :meth:`mapLogRecord` and then :func:`urllib.parse.urlencode` to encode the
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -0700990 dictionary in a form suitable for sending to a web server.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000991
992
993.. _queue-handler:
994
995
996QueueHandler
997^^^^^^^^^^^^
998
999.. versionadded:: 3.2
1000
1001The :class:`QueueHandler` class, located in the :mod:`logging.handlers` module,
1002supports sending logging messages to a queue, such as those implemented in the
1003:mod:`queue` or :mod:`multiprocessing` modules.
1004
1005Along with the :class:`QueueListener` class, :class:`QueueHandler` can be used
1006to let handlers do their work on a separate thread from the one which does the
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -07001007logging. This is important in web applications and also other service
Vinay Sajipc63619b2010-12-19 12:56:57 +00001008applications where threads servicing clients need to respond as quickly as
1009possible, while any potentially slow operations (such as sending an email via
1010:class:`SMTPHandler`) are done on a separate thread.
1011
1012.. class:: QueueHandler(queue)
1013
1014 Returns a new instance of the :class:`QueueHandler` class. The instance is
Vinay Sajipe6b64b72019-07-01 18:45:07 +01001015 initialized with the queue to send messages to. The *queue* can be any
1016 queue-like object; it's used as-is by the :meth:`enqueue` method, which
1017 needs to know how to send messages to it. The queue is not *required* to
1018 have the task tracking API, which means that you can use
1019 :class:`~queue.SimpleQueue` instances for *queue*.
Vinay Sajipc63619b2010-12-19 12:56:57 +00001020
1021
1022 .. method:: emit(record)
1023
Vinay Sajip0f4e8132019-07-01 20:45:01 +01001024 Enqueues the result of preparing the LogRecord. Should an exception
1025 occur (e.g. because a bounded queue has filled up), the
1026 :meth:`~logging.Handler.handleError` method is called to handle the
1027 error. This can result in the record silently being dropped (if
1028 :attr:`logging.raiseExceptions` is ``False``) or a message printed to
1029 ``sys.stderr`` (if :attr:`logging.raiseExceptions` is ``True``).
Vinay Sajipc63619b2010-12-19 12:56:57 +00001030
1031 .. method:: prepare(record)
1032
1033 Prepares a record for queuing. The object returned by this
1034 method is enqueued.
1035
Cheryl Sabellad345bb42018-09-25 19:00:08 -04001036 The base implementation formats the record to merge the message,
1037 arguments, and exception information, if present. It also
1038 removes unpickleable items from the record in-place.
Vinay Sajipc63619b2010-12-19 12:56:57 +00001039
1040 You might want to override this method if you want to convert
1041 the record to a dict or JSON string, or send a modified copy
1042 of the record while leaving the original intact.
1043
1044 .. method:: enqueue(record)
1045
1046 Enqueues the record on the queue using ``put_nowait()``; you may
1047 want to override this if you want to use blocking behaviour, or a
Vinay Sajip9c10d6b2013-11-15 20:58:13 +00001048 timeout, or a customized queue implementation.
Vinay Sajipc63619b2010-12-19 12:56:57 +00001049
1050
1051
Éric Araujo5eada942011-08-19 00:41:23 +02001052.. _queue-listener:
Vinay Sajipc63619b2010-12-19 12:56:57 +00001053
1054QueueListener
1055^^^^^^^^^^^^^
1056
1057.. versionadded:: 3.2
1058
1059The :class:`QueueListener` class, located in the :mod:`logging.handlers`
1060module, supports receiving logging messages from a queue, such as those
1061implemented in the :mod:`queue` or :mod:`multiprocessing` modules. The
1062messages are received from a queue in an internal thread and passed, on
1063the same thread, to one or more handlers for processing. While
1064:class:`QueueListener` is not itself a handler, it is documented here
1065because it works hand-in-hand with :class:`QueueHandler`.
1066
1067Along with the :class:`QueueHandler` class, :class:`QueueListener` can be used
1068to let handlers do their work on a separate thread from the one which does the
Miss Islington (bot)6fc1efa2021-07-26 15:34:32 -07001069logging. This is important in web applications and also other service
Vinay Sajipc63619b2010-12-19 12:56:57 +00001070applications where threads servicing clients need to respond as quickly as
1071possible, while any potentially slow operations (such as sending an email via
1072:class:`SMTPHandler`) are done on a separate thread.
1073
Vinay Sajip365701a2015-02-09 19:49:00 +00001074.. class:: QueueListener(queue, *handlers, respect_handler_level=False)
Vinay Sajipc63619b2010-12-19 12:56:57 +00001075
1076 Returns a new instance of the :class:`QueueListener` class. The instance is
1077 initialized with the queue to send messages to and a list of handlers which
Martin Panter8f137832017-01-14 08:24:20 +00001078 will handle entries placed on the queue. The queue can be any queue-like
1079 object; it's passed as-is to the :meth:`dequeue` method, which needs
Vinay Sajipe6b64b72019-07-01 18:45:07 +01001080 to know how to get messages from it. The queue is not *required* to have the
1081 task tracking API (though it's used if available), which means that you can
1082 use :class:`~queue.SimpleQueue` instances for *queue*.
1083
1084 If ``respect_handler_level`` is ``True``, a handler's level is respected
1085 (compared with the level for the message) when deciding whether to pass
1086 messages to that handler; otherwise, the behaviour is as in previous Python
1087 versions - to always pass each message to each handler.
Vinay Sajip365701a2015-02-09 19:49:00 +00001088
1089 .. versionchanged:: 3.5
wwuckefd57412019-09-11 16:44:37 +10001090 The ``respect_handler_level`` argument was added.
Vinay Sajipc63619b2010-12-19 12:56:57 +00001091
1092 .. method:: dequeue(block)
1093
1094 Dequeues a record and return it, optionally blocking.
1095
1096 The base implementation uses ``get()``. You may want to override this
1097 method if you want to use timeouts or work with custom queue
1098 implementations.
1099
1100 .. method:: prepare(record)
1101
1102 Prepare a record for handling.
1103
1104 This implementation just returns the passed-in record. You may want to
1105 override this method if you need to do any custom marshalling or
1106 manipulation of the record before passing it to the handlers.
1107
1108 .. method:: handle(record)
1109
1110 Handle a record.
1111
1112 This just loops through the handlers offering them the record
1113 to handle. The actual object passed to the handlers is that which
1114 is returned from :meth:`prepare`.
1115
1116 .. method:: start()
1117
1118 Starts the listener.
1119
1120 This starts up a background thread to monitor the queue for
1121 LogRecords to process.
1122
1123 .. method:: stop()
1124
1125 Stops the listener.
1126
1127 This asks the thread to terminate, and then waits for it to do so.
1128 Note that if you don't call this before your application exits, there
1129 may be some records still left on the queue, which won't be processed.
1130
Vinay Sajipa29a9dd2011-02-25 16:05:26 +00001131 .. method:: enqueue_sentinel()
1132
1133 Writes a sentinel to the queue to tell the listener to quit. This
1134 implementation uses ``put_nowait()``. You may want to override this
1135 method if you want to use timeouts or work with custom queue
1136 implementations.
1137
1138 .. versionadded:: 3.3
1139
Vinay Sajipc63619b2010-12-19 12:56:57 +00001140
1141.. seealso::
1142
1143 Module :mod:`logging`
1144 API reference for the logging module.
1145
1146 Module :mod:`logging.config`
1147 Configuration API for the logging module.
1148
1149