blob: f13f765c019374cbab1bf3dd900bcd0b2c7d518c [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
Vinay Sajip689b68a2010-12-22 15:04:15 +000051 is then written to the stream with a terminator. If exception information
52 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
62.. versionchanged:: 3.2
63 The ``StreamHandler`` class now has a ``terminator`` attribute, default
64 value ``'\n'``, which is used as the terminator when writing a formatted
65 record to a stream. If you don't want this newline termination, you can
66 set the handler instance's ``terminator`` attribute to the empty string.
Vinay Sajip689b68a2010-12-22 15:04:15 +000067 In earlier versions, the terminator was hardcoded as ``'\n'``.
Vinay Sajipc63619b2010-12-19 12:56:57 +000068
69.. _file-handler:
70
71FileHandler
72^^^^^^^^^^^
73
74The :class:`FileHandler` class, located in the core :mod:`logging` package,
75sends logging output to a disk file. It inherits the output functionality from
76:class:`StreamHandler`.
77
78
79.. class:: FileHandler(filename, mode='a', encoding=None, delay=False)
80
81 Returns a new instance of the :class:`FileHandler` class. The specified file is
82 opened and used as the stream for logging. If *mode* is not specified,
Serhiy Storchakaecf41da2016-10-19 16:29:26 +030083 :const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file
Vinay Sajipc63619b2010-12-19 12:56:57 +000084 with that encoding. If *delay* is true, then file opening is deferred until the
85 first call to :meth:`emit`. By default, the file grows indefinitely.
86
Vinay Sajip638e6222016-07-22 18:23:04 +010087 .. versionchanged:: 3.6
88 As well as string values, :class:`~pathlib.Path` objects are also accepted
89 for the *filename* argument.
Vinay Sajipc63619b2010-12-19 12:56:57 +000090
91 .. method:: close()
92
93 Closes the file.
94
95
96 .. method:: emit(record)
97
98 Outputs the record to the file.
99
100
101.. _null-handler:
102
103NullHandler
104^^^^^^^^^^^
105
106.. versionadded:: 3.1
107
108The :class:`NullHandler` class, located in the core :mod:`logging` package,
109does not do any formatting or output. It is essentially a 'no-op' handler
110for use by library developers.
111
112.. class:: NullHandler()
113
114 Returns a new instance of the :class:`NullHandler` class.
115
116 .. method:: emit(record)
117
118 This method does nothing.
119
120 .. method:: handle(record)
121
122 This method does nothing.
123
124 .. method:: createLock()
125
126 This method returns ``None`` for the lock, since there is no
127 underlying I/O to which access needs to be serialized.
128
129
130See :ref:`library-config` for more information on how to use
131:class:`NullHandler`.
132
133.. _watched-file-handler:
134
135WatchedFileHandler
136^^^^^^^^^^^^^^^^^^
137
138.. currentmodule:: logging.handlers
139
140The :class:`WatchedFileHandler` class, located in the :mod:`logging.handlers`
141module, is a :class:`FileHandler` which watches the file it is logging to. If
142the file changes, it is closed and reopened using the file name.
143
144A file change can happen because of usage of programs such as *newsyslog* and
145*logrotate* which perform log file rotation. This handler, intended for use
146under Unix/Linux, watches the file to see if it has changed since the last emit.
147(A file is deemed to have changed if its device or inode have changed.) If the
148file has changed, the old file stream is closed, and the file opened to get a
149new stream.
150
151This handler is not appropriate for use under Windows, because under Windows
152open log files cannot be moved or renamed - logging opens the files with
153exclusive locks - and so there is no need for such a handler. Furthermore,
Vinay Sajip67f39772013-08-17 00:39:42 +0100154*ST_INO* is not supported under Windows; :func:`~os.stat` always returns zero
155for this value.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000156
157
Zachary Ware2f47fb02016-08-09 16:20:41 -0500158.. class:: WatchedFileHandler(filename, mode='a', encoding=None, delay=False)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000159
160 Returns a new instance of the :class:`WatchedFileHandler` class. The specified
161 file is opened and used as the stream for logging. If *mode* is not specified,
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300162 :const:`'a'` is used. If *encoding* is not ``None``, it is used to open the file
Vinay Sajipc63619b2010-12-19 12:56:57 +0000163 with that encoding. If *delay* is true, then file opening is deferred until the
164 first call to :meth:`emit`. By default, the file grows indefinitely.
165
Vinay Sajip638e6222016-07-22 18:23:04 +0100166 .. versionchanged:: 3.6
167 As well as string values, :class:`~pathlib.Path` objects are also accepted
168 for the *filename* argument.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000169
Vinay Sajip29a14452015-10-01 20:54:41 +0100170 .. method:: reopenIfNeeded()
171
172 Checks to see if the file has changed. If it has, the existing stream is
173 flushed and closed and the file opened again, typically as a precursor to
174 outputting the record to the file.
175
Berker Peksag6f038ad2015-10-07 07:54:23 +0300176 .. versionadded:: 3.6
177
Vinay Sajip29a14452015-10-01 20:54:41 +0100178
Vinay Sajipc63619b2010-12-19 12:56:57 +0000179 .. method:: emit(record)
180
Vinay Sajip29a14452015-10-01 20:54:41 +0100181 Outputs the record to the file, but first calls :meth:`reopenIfNeeded` to
182 reopen the file if it has changed.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000183
Vinay Sajip23b94d02012-01-04 12:02:26 +0000184.. _base-rotating-handler:
185
186BaseRotatingHandler
187^^^^^^^^^^^^^^^^^^^
188
189The :class:`BaseRotatingHandler` class, located in the :mod:`logging.handlers`
190module, is the base class for the rotating file handlers,
191:class:`RotatingFileHandler` and :class:`TimedRotatingFileHandler`. You should
192not need to instantiate this class, but it has attributes and methods you may
193need to override.
194
195.. class:: BaseRotatingHandler(filename, mode, encoding=None, delay=False)
196
197 The parameters are as for :class:`FileHandler`. The attributes are:
198
199 .. attribute:: namer
200
201 If this attribute is set to a callable, the :meth:`rotation_filename`
202 method delegates to this callable. The parameters passed to the callable
203 are those passed to :meth:`rotation_filename`.
204
205 .. note:: The namer function is called quite a few times during rollover,
206 so it should be as simple and as fast as possible. It should also
207 return the same output every time for a given input, otherwise the
208 rollover behaviour may not work as expected.
209
210 .. versionadded:: 3.3
211
212
213 .. attribute:: BaseRotatingHandler.rotator
214
215 If this attribute is set to a callable, the :meth:`rotate` method
216 delegates to this callable. The parameters passed to the callable are
217 those passed to :meth:`rotate`.
218
219 .. versionadded:: 3.3
220
221 .. method:: BaseRotatingHandler.rotation_filename(default_name)
222
223 Modify the filename of a log file when rotating.
224
225 This is provided so that a custom filename can be provided.
226
227 The default implementation calls the 'namer' attribute of the handler,
228 if it's callable, passing the default name to it. If the attribute isn't
Ezio Melotti226231c2012-01-18 05:40:00 +0200229 callable (the default is ``None``), the name is returned unchanged.
Vinay Sajip23b94d02012-01-04 12:02:26 +0000230
231 :param default_name: The default name for the log file.
232
233 .. versionadded:: 3.3
234
235
236 .. method:: BaseRotatingHandler.rotate(source, dest)
237
238 When rotating, rotate the current log.
239
240 The default implementation calls the 'rotator' attribute of the handler,
241 if it's callable, passing the source and dest arguments to it. If the
Ezio Melotti226231c2012-01-18 05:40:00 +0200242 attribute isn't callable (the default is ``None``), the source is simply
Vinay Sajip23b94d02012-01-04 12:02:26 +0000243 renamed to the destination.
244
245 :param source: The source filename. This is normally the base
Martin Panterd21e0b52015-10-10 10:36:22 +0000246 filename, e.g. 'test.log'.
Vinay Sajip23b94d02012-01-04 12:02:26 +0000247 :param dest: The destination filename. This is normally
248 what the source is rotated to, e.g. 'test.log.1'.
249
250 .. versionadded:: 3.3
251
252The reason the attributes exist is to save you having to subclass - you can use
253the same callables for instances of :class:`RotatingFileHandler` and
254:class:`TimedRotatingFileHandler`. If either the namer or rotator callable
255raises an exception, this will be handled in the same way as any other
256exception during an :meth:`emit` call, i.e. via the :meth:`handleError` method
257of the handler.
258
259If you need to make more significant changes to rotation processing, you can
260override the methods.
261
262For an example, see :ref:`cookbook-rotator-namer`.
263
264
Vinay Sajipc63619b2010-12-19 12:56:57 +0000265.. _rotating-file-handler:
266
267RotatingFileHandler
268^^^^^^^^^^^^^^^^^^^
269
270The :class:`RotatingFileHandler` class, located in the :mod:`logging.handlers`
271module, supports rotation of disk log files.
272
273
Zachary Ware2f47fb02016-08-09 16:20:41 -0500274.. class:: RotatingFileHandler(filename, mode='a', maxBytes=0, backupCount=0, encoding=None, delay=False)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000275
276 Returns a new instance of the :class:`RotatingFileHandler` class. The specified
277 file is opened and used as the stream for logging. If *mode* is not specified,
Serhiy Storchakaecf41da2016-10-19 16:29:26 +0300278 ``'a'`` is used. If *encoding* is not ``None``, it is used to open the file
Vinay Sajipc63619b2010-12-19 12:56:57 +0000279 with that encoding. If *delay* is true, then file opening is deferred until the
280 first call to :meth:`emit`. By default, the file grows indefinitely.
281
282 You can use the *maxBytes* and *backupCount* values to allow the file to
283 :dfn:`rollover` at a predetermined size. When the size is about to be exceeded,
284 the file is closed and a new file is silently opened for output. Rollover occurs
Vinay Sajip53a21eb2016-12-31 11:06:57 +0000285 whenever the current log file is nearly *maxBytes* in length; but if either of
286 *maxBytes* or *backupCount* is zero, rollover never occurs, so you generally want
287 to set *backupCount* to at least 1, and have a non-zero *maxBytes*.
288 When *backupCount* is non-zero, the system will save old log files by appending
289 the extensions '.1', '.2' etc., to the filename. For example, with a *backupCount*
290 of 5 and a base file name of :file:`app.log`, you would get :file:`app.log`,
Vinay Sajipff37cfe2015-01-23 21:19:04 +0000291 :file:`app.log.1`, :file:`app.log.2`, up to :file:`app.log.5`. The file being
292 written to is always :file:`app.log`. When this file is filled, it is closed
293 and renamed to :file:`app.log.1`, and if files :file:`app.log.1`,
Vinay Sajip53a21eb2016-12-31 11:06:57 +0000294 :file:`app.log.2`, etc. exist, then they are renamed to :file:`app.log.2`,
295 :file:`app.log.3` etc. respectively.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000296
Vinay Sajip638e6222016-07-22 18:23:04 +0100297 .. versionchanged:: 3.6
298 As well as string values, :class:`~pathlib.Path` objects are also accepted
299 for the *filename* argument.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000300
301 .. method:: doRollover()
302
303 Does a rollover, as described above.
304
305
306 .. method:: emit(record)
307
308 Outputs the record to the file, catering for rollover as described
309 previously.
310
311.. _timed-rotating-file-handler:
312
313TimedRotatingFileHandler
314^^^^^^^^^^^^^^^^^^^^^^^^
315
316The :class:`TimedRotatingFileHandler` class, located in the
317:mod:`logging.handlers` module, supports rotation of disk log files at certain
318timed intervals.
319
320
Vinay Sajipa7130792013-04-12 17:04:23 +0100321.. class:: TimedRotatingFileHandler(filename, when='h', interval=1, backupCount=0, encoding=None, delay=False, utc=False, atTime=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000322
323 Returns a new instance of the :class:`TimedRotatingFileHandler` class. The
324 specified file is opened and used as the stream for logging. On rotating it also
325 sets the filename suffix. Rotating happens based on the product of *when* and
326 *interval*.
327
328 You can use the *when* to specify the type of *interval*. The list of possible
329 values is below. Note that they are not case sensitive.
330
Vinay Sajipdd308302016-08-24 17:49:15 +0100331 +----------------+----------------------------+-------------------------+
332 | Value | Type of interval | If/how *atTime* is used |
333 +================+============================+=========================+
334 | ``'S'`` | Seconds | Ignored |
335 +----------------+----------------------------+-------------------------+
336 | ``'M'`` | Minutes | Ignored |
337 +----------------+----------------------------+-------------------------+
338 | ``'H'`` | Hours | Ignored |
339 +----------------+----------------------------+-------------------------+
340 | ``'D'`` | Days | Ignored |
341 +----------------+----------------------------+-------------------------+
342 | ``'W0'-'W6'`` | Weekday (0=Monday) | Used to compute initial |
343 | | | rollover time |
344 +----------------+----------------------------+-------------------------+
345 | ``'midnight'`` | Roll over at midnight, if | Used to compute initial |
346 | | *atTime* not specified, | rollover time |
347 | | else at time *atTime* | |
348 +----------------+----------------------------+-------------------------+
Vinay Sajipc63619b2010-12-19 12:56:57 +0000349
Vinay Sajip832d99b2013-03-08 23:24:30 +0000350 When using weekday-based rotation, specify 'W0' for Monday, 'W1' for
351 Tuesday, and so on up to 'W6' for Sunday. In this case, the value passed for
352 *interval* isn't used.
353
Vinay Sajipc63619b2010-12-19 12:56:57 +0000354 The system will save old log files by appending extensions to the filename.
355 The extensions are date-and-time based, using the strftime format
356 ``%Y-%m-%d_%H-%M-%S`` or a leading portion thereof, depending on the
357 rollover interval.
358
359 When computing the next rollover time for the first time (when the handler
360 is created), the last modification time of an existing log file, or else
361 the current time, is used to compute when the next rotation will occur.
362
363 If the *utc* argument is true, times in UTC will be used; otherwise
364 local time is used.
365
366 If *backupCount* is nonzero, at most *backupCount* files
367 will be kept, and if more would be created when rollover occurs, the oldest
368 one is deleted. The deletion logic uses the interval to determine which
369 files to delete, so changing the interval may leave old files lying around.
370
371 If *delay* is true, then file opening is deferred until the first call to
372 :meth:`emit`.
373
Vinay Sajipa7130792013-04-12 17:04:23 +0100374 If *atTime* is not ``None``, it must be a ``datetime.time`` instance which
375 specifies the time of day when rollover occurs, for the cases where rollover
Vinay Sajipdd308302016-08-24 17:49:15 +0100376 is set to happen "at midnight" or "on a particular weekday". Note that in
377 these cases, the *atTime* value is effectively used to compute the *initial*
378 rollover, and subsequent rollovers would be calculated via the normal
379 interval calculation.
380
381 .. note:: Calculation of the initial rollover time is done when the handler
382 is initialised. Calculation of subsequent rollover times is done only
383 when rollover occurs, and rollover occurs only when emitting output. If
384 this is not kept in mind, it might lead to some confusion. For example,
385 if an interval of "every minute" is set, that does not mean you will
386 always see log files with times (in the filename) separated by a minute;
387 if, during application execution, logging output is generated more
388 frequently than once a minute, *then* you can expect to see log files
389 with times separated by a minute. If, on the other hand, logging messages
390 are only output once every five minutes (say), then there will be gaps in
391 the file times corresponding to the minutes where no output (and hence no
392 rollover) occurred.
Vinay Sajipa7130792013-04-12 17:04:23 +0100393
394 .. versionchanged:: 3.4
395 *atTime* parameter was added.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000396
Vinay Sajip638e6222016-07-22 18:23:04 +0100397 .. versionchanged:: 3.6
398 As well as string values, :class:`~pathlib.Path` objects are also accepted
399 for the *filename* argument.
400
Vinay Sajipc63619b2010-12-19 12:56:57 +0000401 .. method:: doRollover()
402
403 Does a rollover, as described above.
404
Vinay Sajipc63619b2010-12-19 12:56:57 +0000405 .. method:: emit(record)
406
407 Outputs the record to the file, catering for rollover as described above.
408
409
410.. _socket-handler:
411
412SocketHandler
413^^^^^^^^^^^^^
414
415The :class:`SocketHandler` class, located in the :mod:`logging.handlers` module,
416sends logging output to a network socket. The base class uses a TCP socket.
417
418
419.. class:: SocketHandler(host, port)
420
421 Returns a new instance of the :class:`SocketHandler` class intended to
422 communicate with a remote machine whose address is given by *host* and *port*.
423
Vinay Sajip5421f352013-09-27 18:18:28 +0100424 .. versionchanged:: 3.4
425 If ``port`` is specified as ``None``, a Unix domain socket is created
426 using the value in ``host`` - otherwise, a TCP socket is created.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000427
428 .. method:: close()
429
430 Closes the socket.
431
432
433 .. method:: emit()
434
435 Pickles the record's attribute dictionary and writes it to the socket in
436 binary format. If there is an error with the socket, silently drops the
437 packet. If the connection was previously lost, re-establishes the
438 connection. To unpickle the record at the receiving end into a
Vinay Sajip67f39772013-08-17 00:39:42 +0100439 :class:`~logging.LogRecord`, use the :func:`~logging.makeLogRecord`
440 function.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000441
442
443 .. method:: handleError()
444
445 Handles an error which has occurred during :meth:`emit`. The most likely
446 cause is a lost connection. Closes the socket so that we can retry on the
447 next event.
448
449
450 .. method:: makeSocket()
451
452 This is a factory method which allows subclasses to define the precise
453 type of socket they want. The default implementation creates a TCP socket
454 (:const:`socket.SOCK_STREAM`).
455
456
457 .. method:: makePickle(record)
458
459 Pickles the record's attribute dictionary in binary format with a length
460 prefix, and returns it ready for transmission across the socket.
461
462 Note that pickles aren't completely secure. If you are concerned about
463 security, you may want to override this method to implement a more secure
464 mechanism. For example, you can sign pickles using HMAC and then verify
465 them on the receiving end, or alternatively you can disable unpickling of
466 global objects on the receiving end.
467
Georg Brandl08e278a2011-02-15 12:44:43 +0000468
Vinay Sajipc63619b2010-12-19 12:56:57 +0000469 .. method:: send(packet)
470
471 Send a pickled string *packet* to the socket. This function allows for
472 partial sends which can happen when the network is busy.
473
Georg Brandl08e278a2011-02-15 12:44:43 +0000474
Georg Brandldbb95852011-02-15 12:41:17 +0000475 .. method:: createSocket()
476
477 Tries to create a socket; on failure, uses an exponential back-off
Donald Stufft8b852f12014-05-20 12:58:38 -0400478 algorithm. On initial failure, the handler will drop the message it was
Georg Brandldbb95852011-02-15 12:41:17 +0000479 trying to send. When subsequent messages are handled by the same
480 instance, it will not try connecting until some time has passed. The
481 default parameters are such that the initial delay is one second, and if
482 after that delay the connection still can't be made, the handler will
483 double the delay each time up to a maximum of 30 seconds.
484
485 This behaviour is controlled by the following handler attributes:
486
487 * ``retryStart`` (initial delay, defaulting to 1.0 seconds).
488 * ``retryFactor`` (multiplier, defaulting to 2.0).
489 * ``retryMax`` (maximum delay, defaulting to 30.0 seconds).
490
491 This means that if the remote listener starts up *after* the handler has
492 been used, you could lose messages (since the handler won't even attempt
493 a connection until the delay has elapsed, but just silently drop messages
494 during the delay period).
Georg Brandl08e278a2011-02-15 12:44:43 +0000495
Vinay Sajipc63619b2010-12-19 12:56:57 +0000496
497.. _datagram-handler:
498
499DatagramHandler
500^^^^^^^^^^^^^^^
501
502The :class:`DatagramHandler` class, located in the :mod:`logging.handlers`
503module, inherits from :class:`SocketHandler` to support sending logging messages
504over UDP sockets.
505
506
507.. class:: DatagramHandler(host, port)
508
509 Returns a new instance of the :class:`DatagramHandler` class intended to
510 communicate with a remote machine whose address is given by *host* and *port*.
511
Vinay Sajip5421f352013-09-27 18:18:28 +0100512 .. versionchanged:: 3.4
513 If ``port`` is specified as ``None``, a Unix domain socket is created
514 using the value in ``host`` - otherwise, a TCP socket is created.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000515
516 .. method:: emit()
517
518 Pickles the record's attribute dictionary and writes it to the socket in
519 binary format. If there is an error with the socket, silently drops the
520 packet. To unpickle the record at the receiving end into a
Vinay Sajip67f39772013-08-17 00:39:42 +0100521 :class:`~logging.LogRecord`, use the :func:`~logging.makeLogRecord`
522 function.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000523
524
525 .. method:: makeSocket()
526
527 The factory method of :class:`SocketHandler` is here overridden to create
528 a UDP socket (:const:`socket.SOCK_DGRAM`).
529
530
531 .. method:: send(s)
532
533 Send a pickled string to a socket.
534
535
536.. _syslog-handler:
537
538SysLogHandler
539^^^^^^^^^^^^^
540
541The :class:`SysLogHandler` class, located in the :mod:`logging.handlers` module,
542supports sending logging messages to a remote or local Unix syslog.
543
544
545.. class:: SysLogHandler(address=('localhost', SYSLOG_UDP_PORT), facility=LOG_USER, socktype=socket.SOCK_DGRAM)
546
547 Returns a new instance of the :class:`SysLogHandler` class intended to
548 communicate with a remote Unix machine whose address is given by *address* in
549 the form of a ``(host, port)`` tuple. If *address* is not specified,
550 ``('localhost', 514)`` is used. The address is used to open a socket. An
551 alternative to providing a ``(host, port)`` tuple is providing an address as a
552 string, for example '/dev/log'. In this case, a Unix domain socket is used to
553 send the message to the syslog. If *facility* is not specified,
554 :const:`LOG_USER` is used. The type of socket opened depends on the
555 *socktype* argument, which defaults to :const:`socket.SOCK_DGRAM` and thus
556 opens a UDP socket. To open a TCP socket (for use with the newer syslog
557 daemons such as rsyslog), specify a value of :const:`socket.SOCK_STREAM`.
558
559 Note that if your server is not listening on UDP port 514,
560 :class:`SysLogHandler` may appear not to work. In that case, check what
561 address you should be using for a domain socket - it's system dependent.
562 For example, on Linux it's usually '/dev/log' but on OS/X it's
563 '/var/run/syslog'. You'll need to check your platform and use the
564 appropriate address (you may need to do this check at runtime if your
565 application needs to run on several platforms). On Windows, you pretty
566 much have to use the UDP option.
567
568 .. versionchanged:: 3.2
569 *socktype* was added.
570
571
572 .. method:: close()
573
574 Closes the socket to the remote host.
575
576
577 .. method:: emit(record)
578
579 The record is formatted, and then sent to the syslog server. If exception
580 information is present, it is *not* sent to the server.
581
Vinay Sajip645e4582011-06-10 18:52:50 +0100582 .. versionchanged:: 3.2.1
583 (See: :issue:`12168`.) In earlier versions, the message sent to the
584 syslog daemons was always terminated with a NUL byte, because early
585 versions of these daemons expected a NUL terminated message - even
Serhiy Storchaka77400622016-03-18 14:36:47 +0200586 though it's not in the relevant specification (RFC 5424). More recent
Vinay Sajip645e4582011-06-10 18:52:50 +0100587 versions of these daemons don't expect the NUL byte but strip it off
588 if it's there, and even more recent daemons (which adhere more closely
589 to RFC 5424) pass the NUL byte on as part of the message.
590
591 To enable easier handling of syslog messages in the face of all these
592 differing daemon behaviours, the appending of the NUL byte has been
593 made configurable, through the use of a class-level attribute,
594 ``append_nul``. This defaults to ``True`` (preserving the existing
595 behaviour) but can be set to ``False`` on a ``SysLogHandler`` instance
596 in order for that instance to *not* append the NUL terminator.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000597
Vinay Sajip2353e352011-06-27 15:40:06 +0100598 .. versionchanged:: 3.3
599 (See: :issue:`12419`.) In earlier versions, there was no facility for
600 an "ident" or "tag" prefix to identify the source of the message. This
601 can now be specified using a class-level attribute, defaulting to
602 ``""`` to preserve existing behaviour, but which can be overridden on
603 a ``SysLogHandler`` instance in order for that instance to prepend
604 the ident to every message handled. Note that the provided ident must
605 be text, not bytes, and is prepended to the message exactly as is.
606
Vinay Sajipc63619b2010-12-19 12:56:57 +0000607 .. method:: encodePriority(facility, priority)
608
609 Encodes the facility and priority into an integer. You can pass in strings
610 or integers - if strings are passed, internal mapping dictionaries are
611 used to convert them to integers.
612
613 The symbolic ``LOG_`` values are defined in :class:`SysLogHandler` and
614 mirror the values defined in the ``sys/syslog.h`` header file.
615
616 **Priorities**
617
618 +--------------------------+---------------+
619 | Name (string) | Symbolic value|
620 +==========================+===============+
621 | ``alert`` | LOG_ALERT |
622 +--------------------------+---------------+
623 | ``crit`` or ``critical`` | LOG_CRIT |
624 +--------------------------+---------------+
625 | ``debug`` | LOG_DEBUG |
626 +--------------------------+---------------+
627 | ``emerg`` or ``panic`` | LOG_EMERG |
628 +--------------------------+---------------+
629 | ``err`` or ``error`` | LOG_ERR |
630 +--------------------------+---------------+
631 | ``info`` | LOG_INFO |
632 +--------------------------+---------------+
633 | ``notice`` | LOG_NOTICE |
634 +--------------------------+---------------+
635 | ``warn`` or ``warning`` | LOG_WARNING |
636 +--------------------------+---------------+
637
638 **Facilities**
639
640 +---------------+---------------+
641 | Name (string) | Symbolic value|
642 +===============+===============+
643 | ``auth`` | LOG_AUTH |
644 +---------------+---------------+
645 | ``authpriv`` | LOG_AUTHPRIV |
646 +---------------+---------------+
647 | ``cron`` | LOG_CRON |
648 +---------------+---------------+
649 | ``daemon`` | LOG_DAEMON |
650 +---------------+---------------+
651 | ``ftp`` | LOG_FTP |
652 +---------------+---------------+
653 | ``kern`` | LOG_KERN |
654 +---------------+---------------+
655 | ``lpr`` | LOG_LPR |
656 +---------------+---------------+
657 | ``mail`` | LOG_MAIL |
658 +---------------+---------------+
659 | ``news`` | LOG_NEWS |
660 +---------------+---------------+
661 | ``syslog`` | LOG_SYSLOG |
662 +---------------+---------------+
663 | ``user`` | LOG_USER |
664 +---------------+---------------+
665 | ``uucp`` | LOG_UUCP |
666 +---------------+---------------+
667 | ``local0`` | LOG_LOCAL0 |
668 +---------------+---------------+
669 | ``local1`` | LOG_LOCAL1 |
670 +---------------+---------------+
671 | ``local2`` | LOG_LOCAL2 |
672 +---------------+---------------+
673 | ``local3`` | LOG_LOCAL3 |
674 +---------------+---------------+
675 | ``local4`` | LOG_LOCAL4 |
676 +---------------+---------------+
677 | ``local5`` | LOG_LOCAL5 |
678 +---------------+---------------+
679 | ``local6`` | LOG_LOCAL6 |
680 +---------------+---------------+
681 | ``local7`` | LOG_LOCAL7 |
682 +---------------+---------------+
683
684 .. method:: mapPriority(levelname)
685
686 Maps a logging level name to a syslog priority name.
687 You may need to override this if you are using custom levels, or
688 if the default algorithm is not suitable for your needs. The
689 default algorithm maps ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR`` and
690 ``CRITICAL`` to the equivalent syslog names, and all other level
691 names to 'warning'.
692
693.. _nt-eventlog-handler:
694
695NTEventLogHandler
696^^^^^^^^^^^^^^^^^
697
698The :class:`NTEventLogHandler` class, located in the :mod:`logging.handlers`
699module, supports sending logging messages to a local Windows NT, Windows 2000 or
700Windows XP event log. Before you can use it, you need Mark Hammond's Win32
701extensions for Python installed.
702
703
704.. class:: NTEventLogHandler(appname, dllname=None, logtype='Application')
705
706 Returns a new instance of the :class:`NTEventLogHandler` class. The *appname* is
707 used to define the application name as it appears in the event log. An
708 appropriate registry entry is created using this name. The *dllname* should give
709 the fully qualified pathname of a .dll or .exe which contains message
710 definitions to hold in the log (if not specified, ``'win32service.pyd'`` is used
711 - this is installed with the Win32 extensions and contains some basic
712 placeholder message definitions. Note that use of these placeholders will make
713 your event logs big, as the entire message source is held in the log. If you
714 want slimmer logs, you have to pass in the name of your own .dll or .exe which
715 contains the message definitions you want to use in the event log). The
716 *logtype* is one of ``'Application'``, ``'System'`` or ``'Security'``, and
717 defaults to ``'Application'``.
718
719
720 .. method:: close()
721
722 At this point, you can remove the application name from the registry as a
723 source of event log entries. However, if you do this, you will not be able
724 to see the events as you intended in the Event Log Viewer - it needs to be
725 able to access the registry to get the .dll name. The current version does
726 not do this.
727
728
729 .. method:: emit(record)
730
731 Determines the message ID, event category and event type, and then logs
732 the message in the NT event log.
733
734
735 .. method:: getEventCategory(record)
736
737 Returns the event category for the record. Override this if you want to
738 specify your own categories. This version returns 0.
739
740
741 .. method:: getEventType(record)
742
743 Returns the event type for the record. Override this if you want to
744 specify your own types. This version does a mapping using the handler's
745 typemap attribute, which is set up in :meth:`__init__` to a dictionary
746 which contains mappings for :const:`DEBUG`, :const:`INFO`,
747 :const:`WARNING`, :const:`ERROR` and :const:`CRITICAL`. If you are using
748 your own levels, you will either need to override this method or place a
749 suitable dictionary in the handler's *typemap* attribute.
750
751
752 .. method:: getMessageID(record)
753
754 Returns the message ID for the record. If you are using your own messages,
755 you could do this by having the *msg* passed to the logger being an ID
756 rather than a format string. Then, in here, you could use a dictionary
757 lookup to get the message ID. This version returns 1, which is the base
758 message ID in :file:`win32service.pyd`.
759
760.. _smtp-handler:
761
762SMTPHandler
763^^^^^^^^^^^
764
765The :class:`SMTPHandler` class, located in the :mod:`logging.handlers` module,
766supports sending logging messages to an email address via SMTP.
767
768
Vinay Sajip38a12af2012-03-26 17:17:39 +0100769.. class:: SMTPHandler(mailhost, fromaddr, toaddrs, subject, credentials=None, secure=None, timeout=1.0)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000770
771 Returns a new instance of the :class:`SMTPHandler` class. The instance is
772 initialized with the from and to addresses and subject line of the email. The
773 *toaddrs* should be a list of strings. To specify a non-standard SMTP port, use
774 the (host, port) tuple format for the *mailhost* argument. If you use a string,
775 the standard SMTP port is used. If your SMTP server requires authentication, you
776 can specify a (username, password) tuple for the *credentials* argument.
777
Vinay Sajip95259562011-08-01 11:31:52 +0100778 To specify the use of a secure protocol (TLS), pass in a tuple to the
779 *secure* argument. This will only be used when authentication credentials are
780 supplied. The tuple should be either an empty tuple, or a single-value tuple
781 with the name of a keyfile, or a 2-value tuple with the names of the keyfile
782 and certificate file. (This tuple is passed to the
783 :meth:`smtplib.SMTP.starttls` method.)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000784
Vinay Sajip38a12af2012-03-26 17:17:39 +0100785 A timeout can be specified for communication with the SMTP server using the
786 *timeout* argument.
787
788 .. versionadded:: 3.3
789 The *timeout* argument was added.
790
Vinay Sajipc63619b2010-12-19 12:56:57 +0000791 .. method:: emit(record)
792
793 Formats the record and sends it to the specified addressees.
794
795
796 .. method:: getSubject(record)
797
798 If you want to specify a subject line which is record-dependent, override
799 this method.
800
801.. _memory-handler:
802
803MemoryHandler
804^^^^^^^^^^^^^
805
806The :class:`MemoryHandler` class, located in the :mod:`logging.handlers` module,
807supports buffering of logging records in memory, periodically flushing them to a
808:dfn:`target` handler. Flushing occurs whenever the buffer is full, or when an
809event of a certain severity or greater is seen.
810
811:class:`MemoryHandler` is a subclass of the more general
812:class:`BufferingHandler`, which is an abstract class. This buffers logging
813records in memory. Whenever each record is added to the buffer, a check is made
814by calling :meth:`shouldFlush` to see if the buffer should be flushed. If it
Vinay Sajip8ece80f2012-03-26 17:09:58 +0100815should, then :meth:`flush` is expected to do the flushing.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000816
817
818.. class:: BufferingHandler(capacity)
819
820 Initializes the handler with a buffer of the specified capacity.
821
822
823 .. method:: emit(record)
824
825 Appends the record to the buffer. If :meth:`shouldFlush` returns true,
826 calls :meth:`flush` to process the buffer.
827
828
829 .. method:: flush()
830
831 You can override this to implement custom flushing behavior. This version
832 just zaps the buffer to empty.
833
834
835 .. method:: shouldFlush(record)
836
837 Returns true if the buffer is up to capacity. This method can be
838 overridden to implement custom flushing strategies.
839
840
Vinay Sajipcccf6062016-07-22 16:27:31 +0100841.. class:: MemoryHandler(capacity, flushLevel=ERROR, target=None, flushOnClose=True)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000842
843 Returns a new instance of the :class:`MemoryHandler` class. The instance is
844 initialized with a buffer size of *capacity*. If *flushLevel* is not specified,
845 :const:`ERROR` is used. If no *target* is specified, the target will need to be
Vinay Sajipcccf6062016-07-22 16:27:31 +0100846 set using :meth:`setTarget` before this handler does anything useful. If
847 *flushOnClose* is specified as ``False``, then the buffer is *not* flushed when
848 the handler is closed. If not specified or specified as ``True``, the previous
849 behaviour of flushing the buffer will occur when the handler is closed.
850
851 .. versionchanged:: 3.6
852 The *flushOnClose* parameter was added.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000853
854
855 .. method:: close()
856
Ezio Melotti226231c2012-01-18 05:40:00 +0200857 Calls :meth:`flush`, sets the target to ``None`` and clears the
Vinay Sajipc63619b2010-12-19 12:56:57 +0000858 buffer.
859
860
861 .. method:: flush()
862
863 For a :class:`MemoryHandler`, flushing means just sending the buffered
864 records to the target, if there is one. The buffer is also cleared when
865 this happens. Override if you want different behavior.
866
867
868 .. method:: setTarget(target)
869
870 Sets the target handler for this handler.
871
872
873 .. method:: shouldFlush(record)
874
875 Checks for buffer full or a record at the *flushLevel* or higher.
876
877
878.. _http-handler:
879
880HTTPHandler
881^^^^^^^^^^^
882
883The :class:`HTTPHandler` class, located in the :mod:`logging.handlers` module,
884supports sending logging messages to a Web server, using either ``GET`` or
885``POST`` semantics.
886
887
Benjamin Peterson43052a12014-11-23 20:36:44 -0600888.. class:: HTTPHandler(host, url, method='GET', secure=False, credentials=None, context=None)
Vinay Sajipc63619b2010-12-19 12:56:57 +0000889
890 Returns a new instance of the :class:`HTTPHandler` class. The *host* can be
Benjamin Peterson43052a12014-11-23 20:36:44 -0600891 of the form ``host:port``, should you need to use a specific port number. If
892 no *method* is specified, ``GET`` is used. If *secure* is true, a HTTPS
893 connection will be used. The *context* parameter may be set to a
894 :class:`ssl.SSLContext` instance to configure the SSL settings used for the
895 HTTPS connection. If *credentials* is specified, it should be a 2-tuple
896 consisting of userid and password, which will be placed in a HTTP
Vinay Sajipc63619b2010-12-19 12:56:57 +0000897 'Authorization' header using Basic authentication. If you specify
898 credentials, you should also specify secure=True so that your userid and
899 password are not passed in cleartext across the wire.
900
Benjamin Petersona90e92d2014-11-23 20:38:37 -0600901 .. versionchanged:: 3.5
Benjamin Peterson43052a12014-11-23 20:36:44 -0600902 The *context* parameter was added.
903
Vinay Sajipc673a9a2014-05-30 18:59:27 +0100904 .. method:: mapLogRecord(record)
905
906 Provides a dictionary, based on ``record``, which is to be URL-encoded
907 and sent to the web server. The default implementation just returns
908 ``record.__dict__``. This method can be overridden if e.g. only a
909 subset of :class:`~logging.LogRecord` is to be sent to the web server, or
910 if more specific customization of what's sent to the server is required.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000911
912 .. method:: emit(record)
913
Martin Panter6245cb32016-04-15 02:14:19 +0000914 Sends the record to the Web server as a URL-encoded dictionary. The
Vinay Sajipc673a9a2014-05-30 18:59:27 +0100915 :meth:`mapLogRecord` method is used to convert the record to the
916 dictionary to be sent.
917
Berker Peksag9c1dba22014-09-28 00:00:58 +0300918 .. note:: Since preparing a record for sending it to a Web server is not
Vinay Sajipc673a9a2014-05-30 18:59:27 +0100919 the same as a generic formatting operation, using
920 :meth:`~logging.Handler.setFormatter` to specify a
921 :class:`~logging.Formatter` for a :class:`HTTPHandler` has no effect.
922 Instead of calling :meth:`~logging.Handler.format`, this handler calls
923 :meth:`mapLogRecord` and then :func:`urllib.parse.urlencode` to encode the
924 dictionary in a form suitable for sending to a Web server.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000925
926
927.. _queue-handler:
928
929
930QueueHandler
931^^^^^^^^^^^^
932
933.. versionadded:: 3.2
934
935The :class:`QueueHandler` class, located in the :mod:`logging.handlers` module,
936supports sending logging messages to a queue, such as those implemented in the
937:mod:`queue` or :mod:`multiprocessing` modules.
938
939Along with the :class:`QueueListener` class, :class:`QueueHandler` can be used
940to let handlers do their work on a separate thread from the one which does the
941logging. This is important in Web applications and also other service
942applications where threads servicing clients need to respond as quickly as
943possible, while any potentially slow operations (such as sending an email via
944:class:`SMTPHandler`) are done on a separate thread.
945
946.. class:: QueueHandler(queue)
947
948 Returns a new instance of the :class:`QueueHandler` class. The instance is
Martin Panter8f137832017-01-14 08:24:20 +0000949 initialized with the queue to send messages to. The queue can be any
950 queue-like object; it's used as-is by the :meth:`enqueue` method, which needs
Vinay Sajipc63619b2010-12-19 12:56:57 +0000951 to know how to send messages to it.
952
953
954 .. method:: emit(record)
955
956 Enqueues the result of preparing the LogRecord.
957
958 .. method:: prepare(record)
959
960 Prepares a record for queuing. The object returned by this
961 method is enqueued.
962
963 The base implementation formats the record to merge the message
964 and arguments, and removes unpickleable items from the record
965 in-place.
966
967 You might want to override this method if you want to convert
968 the record to a dict or JSON string, or send a modified copy
969 of the record while leaving the original intact.
970
971 .. method:: enqueue(record)
972
973 Enqueues the record on the queue using ``put_nowait()``; you may
974 want to override this if you want to use blocking behaviour, or a
Vinay Sajip9c10d6b2013-11-15 20:58:13 +0000975 timeout, or a customized queue implementation.
Vinay Sajipc63619b2010-12-19 12:56:57 +0000976
977
978
Éric Araujo5eada942011-08-19 00:41:23 +0200979.. _queue-listener:
Vinay Sajipc63619b2010-12-19 12:56:57 +0000980
981QueueListener
982^^^^^^^^^^^^^
983
984.. versionadded:: 3.2
985
986The :class:`QueueListener` class, located in the :mod:`logging.handlers`
987module, supports receiving logging messages from a queue, such as those
988implemented in the :mod:`queue` or :mod:`multiprocessing` modules. The
989messages are received from a queue in an internal thread and passed, on
990the same thread, to one or more handlers for processing. While
991:class:`QueueListener` is not itself a handler, it is documented here
992because it works hand-in-hand with :class:`QueueHandler`.
993
994Along with the :class:`QueueHandler` class, :class:`QueueListener` can be used
995to let handlers do their work on a separate thread from the one which does the
996logging. This is important in Web applications and also other service
997applications where threads servicing clients need to respond as quickly as
998possible, while any potentially slow operations (such as sending an email via
999:class:`SMTPHandler`) are done on a separate thread.
1000
Vinay Sajip365701a2015-02-09 19:49:00 +00001001.. class:: QueueListener(queue, *handlers, respect_handler_level=False)
Vinay Sajipc63619b2010-12-19 12:56:57 +00001002
1003 Returns a new instance of the :class:`QueueListener` class. The instance is
1004 initialized with the queue to send messages to and a list of handlers which
Martin Panter8f137832017-01-14 08:24:20 +00001005 will handle entries placed on the queue. The queue can be any queue-like
1006 object; it's passed as-is to the :meth:`dequeue` method, which needs
Vinay Sajip365701a2015-02-09 19:49:00 +00001007 to know how to get messages from it. If ``respect_handler_level`` is ``True``,
1008 a handler's level is respected (compared with the level for the message) when
1009 deciding whether to pass messages to that handler; otherwise, the behaviour
1010 is as in previous Python versions - to always pass each message to each
1011 handler.
1012
1013 .. versionchanged:: 3.5
1014 The ``respect_handler_levels`` argument was added.
Vinay Sajipc63619b2010-12-19 12:56:57 +00001015
1016 .. method:: dequeue(block)
1017
1018 Dequeues a record and return it, optionally blocking.
1019
1020 The base implementation uses ``get()``. You may want to override this
1021 method if you want to use timeouts or work with custom queue
1022 implementations.
1023
1024 .. method:: prepare(record)
1025
1026 Prepare a record for handling.
1027
1028 This implementation just returns the passed-in record. You may want to
1029 override this method if you need to do any custom marshalling or
1030 manipulation of the record before passing it to the handlers.
1031
1032 .. method:: handle(record)
1033
1034 Handle a record.
1035
1036 This just loops through the handlers offering them the record
1037 to handle. The actual object passed to the handlers is that which
1038 is returned from :meth:`prepare`.
1039
1040 .. method:: start()
1041
1042 Starts the listener.
1043
1044 This starts up a background thread to monitor the queue for
1045 LogRecords to process.
1046
1047 .. method:: stop()
1048
1049 Stops the listener.
1050
1051 This asks the thread to terminate, and then waits for it to do so.
1052 Note that if you don't call this before your application exits, there
1053 may be some records still left on the queue, which won't be processed.
1054
Vinay Sajipa29a9dd2011-02-25 16:05:26 +00001055 .. method:: enqueue_sentinel()
1056
1057 Writes a sentinel to the queue to tell the listener to quit. This
1058 implementation uses ``put_nowait()``. You may want to override this
1059 method if you want to use timeouts or work with custom queue
1060 implementations.
1061
1062 .. versionadded:: 3.3
1063
Vinay Sajipc63619b2010-12-19 12:56:57 +00001064
1065.. seealso::
1066
1067 Module :mod:`logging`
1068 API reference for the logging module.
1069
1070 Module :mod:`logging.config`
1071 Configuration API for the logging module.
1072
1073