blob: 9b57870642e4cfd30e2a8428b487c25f7f06d4dd [file] [log] [blame]
Skip Montanaro649698f2002-11-14 03:57:19 +00001\section{\module{logging} ---
2 Logging facility for Python}
3
Fred Drake9a5b6a62003-07-08 15:38:40 +00004\declaremodule{standard}{logging}
Skip Montanaro649698f2002-11-14 03:57:19 +00005
6% These apply to all modules, and may be given more than once:
7
8\moduleauthor{Vinay Sajip}{vinay_sajip@red-dove.com}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00009\sectionauthor{Vinay Sajip}{vinay_sajip@red-dove.com}
Skip Montanaro649698f2002-11-14 03:57:19 +000010
Fred Drake68e6d572003-01-28 22:02:35 +000011\modulesynopsis{Logging module for Python based on \pep{282}.}
Skip Montanaro649698f2002-11-14 03:57:19 +000012
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000013\indexii{Errors}{logging}
Skip Montanaro649698f2002-11-14 03:57:19 +000014
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000015\versionadded{2.3}
16This module defines functions and classes which implement a flexible
17error logging system for applications.
Skip Montanaro649698f2002-11-14 03:57:19 +000018
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000019Logging is performed by calling methods on instances of the
20\class{Logger} class (hereafter called \dfn{loggers}). Each instance has a
21name, and they are conceptually arranged in a name space hierarchy
22using dots (periods) as separators. For example, a logger named
23"scan" is the parent of loggers "scan.text", "scan.html" and "scan.pdf".
24Logger names can be anything you want, and indicate the area of an
25application in which a logged message originates.
Skip Montanaro649698f2002-11-14 03:57:19 +000026
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000027Logged messages also have levels of importance associated with them.
28The default levels provided are \constant{DEBUG}, \constant{INFO},
29\constant{WARNING}, \constant{ERROR} and \constant{CRITICAL}. As a
30convenience, you indicate the importance of a logged message by calling
31an appropriate method of \class{Logger}. The methods are
Fred Drakec23e0192003-01-28 22:09:16 +000032\method{debug()}, \method{info()}, \method{warning()}, \method{error()} and
33\method{critical()}, which mirror the default levels. You are not
34constrained to use these levels: you can specify your own and use a
35more general \class{Logger} method, \method{log()}, which takes an
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000036explicit level argument.
Skip Montanaro649698f2002-11-14 03:57:19 +000037
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000038Levels can also be associated with loggers, being set either by the
39developer or through loading a saved logging configuration. When a
40logging method is called on a logger, the logger compares its own
41level with the level associated with the method call. If the logger's
42level is higher than the method call's, no logging message is actually
43generated. This is the basic mechanism controlling the verbosity of
44logging output.
Skip Montanaro649698f2002-11-14 03:57:19 +000045
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000046Logging messages are encoded as instances of the \class{LogRecord} class.
47When a logger decides to actually log an event, an \class{LogRecord}
48instance is created from the logging message.
Skip Montanaro649698f2002-11-14 03:57:19 +000049
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000050Logging messages are subjected to a dispatch mechanism through the
51use of \dfn{handlers}, which are instances of subclasses of the
52\class{Handler} class. Handlers are responsible for ensuring that a logged
53message (in the form of a \class{LogRecord}) ends up in a particular
54location (or set of locations) which is useful for the target audience for
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +000055that message (such as end users, support desk staff, system administrators,
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000056developers). Handlers are passed \class{LogRecord} instances intended for
57particular destinations. Each logger can have zero, one or more handlers
Fred Drake6b3b0462004-04-09 18:26:40 +000058associated with it (via the \method{addHandler()} method of \class{Logger}).
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000059In addition to any handlers directly associated with a logger,
Fred Drakec23e0192003-01-28 22:09:16 +000060\emph{all handlers associated with all ancestors of the logger} are
61called to dispatch the message.
Skip Montanaro649698f2002-11-14 03:57:19 +000062
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000063Just as for loggers, handlers can have levels associated with them.
64A handler's level acts as a filter in the same way as a logger's level does.
Fred Drakec23e0192003-01-28 22:09:16 +000065If a handler decides to actually dispatch an event, the \method{emit()} method
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000066is used to send the message to its destination. Most user-defined subclasses
Fred Drakec23e0192003-01-28 22:09:16 +000067of \class{Handler} will need to override this \method{emit()}.
Skip Montanaro649698f2002-11-14 03:57:19 +000068
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000069In addition to the base \class{Handler} class, many useful subclasses
70are provided:
Skip Montanaro649698f2002-11-14 03:57:19 +000071
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000072\begin{enumerate}
Skip Montanaro649698f2002-11-14 03:57:19 +000073
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000074\item \class{StreamHandler} instances send error messages to
75streams (file-like objects).
Skip Montanaro649698f2002-11-14 03:57:19 +000076
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000077\item \class{FileHandler} instances send error messages to disk
78files.
79
80\item \class{RotatingFileHandler} instances send error messages to disk
81files, with support for maximum log file sizes and log file rotation.
82
83\item \class{SocketHandler} instances send error messages to
84TCP/IP sockets.
85
86\item \class{DatagramHandler} instances send error messages to UDP
87sockets.
88
89\item \class{SMTPHandler} instances send error messages to a
90designated email address.
91
92\item \class{SysLogHandler} instances send error messages to a
Fred Drake68e6d572003-01-28 22:02:35 +000093\UNIX{} syslog daemon, possibly on a remote machine.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +000094
95\item \class{NTEventLogHandler} instances send error messages to a
96Windows NT/2000/XP event log.
97
98\item \class{MemoryHandler} instances send error messages to a
99buffer in memory, which is flushed whenever specific criteria are
100met.
101
102\item \class{HTTPHandler} instances send error messages to an
Fred Drake68e6d572003-01-28 22:02:35 +0000103HTTP server using either \samp{GET} or \samp{POST} semantics.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000104
105\end{enumerate}
106
107The \class{StreamHandler} and \class{FileHandler} classes are defined
108in the core logging package. The other handlers are defined in a sub-
109module, \module{logging.handlers}. (There is also another sub-module,
110\module{logging.config}, for configuration functionality.)
111
112Logged messages are formatted for presentation through instances of the
113\class{Formatter} class. They are initialized with a format string
114suitable for use with the \% operator and a dictionary.
115
116For formatting multiple messages in a batch, instances of
117\class{BufferingFormatter} can be used. In addition to the format string
118(which is applied to each message in the batch), there is provision for
119header and trailer format strings.
120
121When filtering based on logger level and/or handler level is not enough,
122instances of \class{Filter} can be added to both \class{Logger} and
Fred Drakec23e0192003-01-28 22:09:16 +0000123\class{Handler} instances (through their \method{addFilter()} method).
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000124Before deciding to process a message further, both loggers and handlers
125consult all their filters for permission. If any filter returns a false
126value, the message is not processed further.
127
128The basic \class{Filter} functionality allows filtering by specific logger
129name. If this feature is used, messages sent to the named logger and its
130children are allowed through the filter, and all others dropped.
131
132In addition to the classes described above, there are a number of module-
133level functions.
134
135\begin{funcdesc}{getLogger}{\optional{name}}
136Return a logger with the specified name or, if no name is specified, return
Vinay Sajip17952b72004-08-31 10:21:51 +0000137a logger which is the root logger of the hierarchy. If specified, the name
138is typically a dot-separated hierarchical name like \var{"a"}, \var{"a.b"}
139or \var{"a.b.c.d"}. Choice of these names is entirely up to the developer
140who is using logging.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000141
142All calls to this function with a given name return the same logger instance.
143This means that logger instances never need to be passed between different
144parts of an application.
Skip Montanaro649698f2002-11-14 03:57:19 +0000145\end{funcdesc}
146
Vinay Sajipc6646c02004-09-22 12:55:16 +0000147\begin{funcdesc}{getLoggerClass}{}
148Return either the standard \class{Logger} class, or the last class passed to
149\function{setLoggerClass()}. This function may be called from within a new
150class definition, to ensure that installing a customised \class{Logger} class
151will not undo customisations already applied by other code. For example:
152
153\begin{verbatim}
154 class MyLogger(logging.getLoggerClass()):
155 # ... override behaviour here
156\end{verbatim}
157
158\end{funcdesc}
159
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000160\begin{funcdesc}{debug}{msg\optional{, *args\optional{, **kwargs}}}
161Logs a message with level \constant{DEBUG} on the root logger.
162The \var{msg} is the message format string, and the \var{args} are the
163arguments which are merged into \var{msg}. The only keyword argument in
164\var{kwargs} which is inspected is \var{exc_info} which, if it does not
165evaluate as false, causes exception information (via a call to
Fred Drakec23e0192003-01-28 22:09:16 +0000166\function{sys.exc_info()}) to be added to the logging message.
Skip Montanaro649698f2002-11-14 03:57:19 +0000167\end{funcdesc}
168
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000169\begin{funcdesc}{info}{msg\optional{, *args\optional{, **kwargs}}}
170Logs a message with level \constant{INFO} on the root logger.
171The arguments are interpreted as for \function{debug()}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000172\end{funcdesc}
173
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000174\begin{funcdesc}{warning}{msg\optional{, *args\optional{, **kwargs}}}
175Logs a message with level \constant{WARNING} on the root logger.
176The arguments are interpreted as for \function{debug()}.
177\end{funcdesc}
178
179\begin{funcdesc}{error}{msg\optional{, *args\optional{, **kwargs}}}
180Logs a message with level \constant{ERROR} on the root logger.
181The arguments are interpreted as for \function{debug()}.
182\end{funcdesc}
183
184\begin{funcdesc}{critical}{msg\optional{, *args\optional{, **kwargs}}}
185Logs a message with level \constant{CRITICAL} on the root logger.
186The arguments are interpreted as for \function{debug()}.
187\end{funcdesc}
188
189\begin{funcdesc}{exception}{msg\optional{, *args}}
190Logs a message with level \constant{ERROR} on the root logger.
191The arguments are interpreted as for \function{debug()}. Exception info
192is added to the logging message. This function should only be called
193from an exception handler.
194\end{funcdesc}
195
Vinay Sajip739d49e2004-09-24 11:46:44 +0000196\begin{funcdesc}{log}{level, msg\optional{, *args\optional{, **kwargs}}}
197Logs a message with level \var{level} on the root logger.
198The other arguments are interpreted as for \function{debug()}.
199\end{funcdesc}
200
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000201\begin{funcdesc}{disable}{lvl}
202Provides an overriding level \var{lvl} for all loggers which takes
203precedence over the logger's own level. When the need arises to
204temporarily throttle logging output down across the whole application,
205this function can be useful.
206\end{funcdesc}
207
208\begin{funcdesc}{addLevelName}{lvl, levelName}
209Associates level \var{lvl} with text \var{levelName} in an internal
210dictionary, which is used to map numeric levels to a textual
211representation, for example when a \class{Formatter} formats a message.
212This function can also be used to define your own levels. The only
213constraints are that all levels used must be registered using this
214function, levels should be positive integers and they should increase
215in increasing order of severity.
216\end{funcdesc}
217
218\begin{funcdesc}{getLevelName}{lvl}
219Returns the textual representation of logging level \var{lvl}. If the
220level is one of the predefined levels \constant{CRITICAL},
221\constant{ERROR}, \constant{WARNING}, \constant{INFO} or \constant{DEBUG}
222then you get the corresponding string. If you have associated levels
223with names using \function{addLevelName()} then the name you have associated
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000224with \var{lvl} is returned. If a numeric value corresponding to one of the
225defined levels is passed in, the corresponding string representation is
226returned. Otherwise, the string "Level \%s" \% lvl is returned.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000227\end{funcdesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000228
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000229\begin{funcdesc}{makeLogRecord}{attrdict}
230Creates and returns a new \class{LogRecord} instance whose attributes are
231defined by \var{attrdict}. This function is useful for taking a pickled
232\class{LogRecord} attribute dictionary, sent over a socket, and reconstituting
233it as a \class{LogRecord} instance at the receiving end.
234\end{funcdesc}
235
Skip Montanaro649698f2002-11-14 03:57:19 +0000236\begin{funcdesc}{basicConfig}{}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000237Does basic configuration for the logging system by creating a
238\class{StreamHandler} with a default \class{Formatter} and adding it to
239the root logger. The functions \function{debug()}, \function{info()},
240\function{warning()}, \function{error()} and \function{critical()} will call
241\function{basicConfig()} automatically if no handlers are defined for the
242root logger.
Skip Montanaro649698f2002-11-14 03:57:19 +0000243\end{funcdesc}
244
Skip Montanaro649698f2002-11-14 03:57:19 +0000245\begin{funcdesc}{shutdown}{}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000246Informs the logging system to perform an orderly shutdown by flushing and
247closing all handlers.
Skip Montanaro649698f2002-11-14 03:57:19 +0000248\end{funcdesc}
249
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000250\begin{funcdesc}{setLoggerClass}{klass}
251Tells the logging system to use the class \var{klass} when instantiating a
252logger. The class should define \method{__init__()} such that only a name
253argument is required, and the \method{__init__()} should call
254\method{Logger.__init__()}. This function is typically called before any
255loggers are instantiated by applications which need to use custom logger
256behavior.
257\end{funcdesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000258
Fred Drake68e6d572003-01-28 22:02:35 +0000259
260\begin{seealso}
261 \seepep{282}{A Logging System}
262 {The proposal which described this feature for inclusion in
263 the Python standard library.}
Fred Drake11514792004-01-08 14:59:02 +0000264 \seelink{http://www.red-dove.com/python_logging.html}
265 {Original Python \module{logging} package}
266 {This is the original source for the \module{logging}
267 package. The version of the package available from this
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000268 site is suitable for use with Python 1.5.2, 2.1.x and 2.2.x,
269 which do not include the \module{logging} package in the standard
Fred Drake11514792004-01-08 14:59:02 +0000270 library.}
Fred Drake68e6d572003-01-28 22:02:35 +0000271\end{seealso}
272
273
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000274\subsection{Logger Objects}
Skip Montanaro649698f2002-11-14 03:57:19 +0000275
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000276Loggers have the following attributes and methods. Note that Loggers are
277never instantiated directly, but always through the module-level function
278\function{logging.getLogger(name)}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000279
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000280\begin{datadesc}{propagate}
281If this evaluates to false, logging messages are not passed by this
282logger or by child loggers to higher level (ancestor) loggers. The
283constructor sets this attribute to 1.
Skip Montanaro649698f2002-11-14 03:57:19 +0000284\end{datadesc}
285
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000286\begin{methoddesc}{setLevel}{lvl}
287Sets the threshold for this logger to \var{lvl}. Logging messages
288which are less severe than \var{lvl} will be ignored. When a logger is
Neal Norwitz6fa635d2003-02-18 14:20:07 +0000289created, the level is set to \constant{NOTSET} (which causes all messages
290to be processed in the root logger, or delegation to the parent in non-root
291loggers).
Skip Montanaro649698f2002-11-14 03:57:19 +0000292\end{methoddesc}
293
294\begin{methoddesc}{isEnabledFor}{lvl}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000295Indicates if a message of severity \var{lvl} would be processed by
296this logger. This method checks first the module-level level set by
297\function{logging.disable(lvl)} and then the logger's effective level as
298determined by \method{getEffectiveLevel()}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000299\end{methoddesc}
300
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000301\begin{methoddesc}{getEffectiveLevel}{}
302Indicates the effective level for this logger. If a value other than
Neal Norwitz6fa635d2003-02-18 14:20:07 +0000303\constant{NOTSET} has been set using \method{setLevel()}, it is returned.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000304Otherwise, the hierarchy is traversed towards the root until a value
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000305other than \constant{NOTSET} is found, and that value is returned.
Skip Montanaro649698f2002-11-14 03:57:19 +0000306\end{methoddesc}
307
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000308\begin{methoddesc}{debug}{msg\optional{, *args\optional{, **kwargs}}}
309Logs a message with level \constant{DEBUG} on this logger.
310The \var{msg} is the message format string, and the \var{args} are the
311arguments which are merged into \var{msg}. The only keyword argument in
312\var{kwargs} which is inspected is \var{exc_info} which, if it does not
313evaluate as false, causes exception information (via a call to
Fred Drakec23e0192003-01-28 22:09:16 +0000314\function{sys.exc_info()}) to be added to the logging message.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000315\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000316
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000317\begin{methoddesc}{info}{msg\optional{, *args\optional{, **kwargs}}}
318Logs a message with level \constant{INFO} on this logger.
319The arguments are interpreted as for \method{debug()}.
320\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000321
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000322\begin{methoddesc}{warning}{msg\optional{, *args\optional{, **kwargs}}}
323Logs a message with level \constant{WARNING} on this logger.
324The arguments are interpreted as for \method{debug()}.
325\end{methoddesc}
326
327\begin{methoddesc}{error}{msg\optional{, *args\optional{, **kwargs}}}
328Logs a message with level \constant{ERROR} on this logger.
329The arguments are interpreted as for \method{debug()}.
330\end{methoddesc}
331
332\begin{methoddesc}{critical}{msg\optional{, *args\optional{, **kwargs}}}
333Logs a message with level \constant{CRITICAL} on this logger.
334The arguments are interpreted as for \method{debug()}.
335\end{methoddesc}
336
337\begin{methoddesc}{log}{lvl, msg\optional{, *args\optional{, **kwargs}}}
Vinay Sajip1cf56d02004-08-04 08:36:44 +0000338Logs a message with integer level \var{lvl} on this logger.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000339The other arguments are interpreted as for \method{debug()}.
340\end{methoddesc}
341
342\begin{methoddesc}{exception}{msg\optional{, *args}}
343Logs a message with level \constant{ERROR} on this logger.
344The arguments are interpreted as for \method{debug()}. Exception info
345is added to the logging message. This method should only be called
346from an exception handler.
347\end{methoddesc}
348
349\begin{methoddesc}{addFilter}{filt}
350Adds the specified filter \var{filt} to this logger.
351\end{methoddesc}
352
353\begin{methoddesc}{removeFilter}{filt}
354Removes the specified filter \var{filt} from this logger.
355\end{methoddesc}
356
357\begin{methoddesc}{filter}{record}
358Applies this logger's filters to the record and returns a true value if
359the record is to be processed.
360\end{methoddesc}
361
362\begin{methoddesc}{addHandler}{hdlr}
363Adds the specified handler \var{hdlr} to this logger.
Skip Montanaro649698f2002-11-14 03:57:19 +0000364\end{methoddesc}
365
366\begin{methoddesc}{removeHandler}{hdlr}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000367Removes the specified handler \var{hdlr} from this logger.
Skip Montanaro649698f2002-11-14 03:57:19 +0000368\end{methoddesc}
369
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000370\begin{methoddesc}{findCaller}{}
371Finds the caller's source filename and line number. Returns the filename
372and line number as a 2-element tuple.
Skip Montanaro649698f2002-11-14 03:57:19 +0000373\end{methoddesc}
374
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000375\begin{methoddesc}{handle}{record}
376Handles a record by passing it to all handlers associated with this logger
377and its ancestors (until a false value of \var{propagate} is found).
378This method is used for unpickled records received from a socket, as well
379as those created locally. Logger-level filtering is applied using
380\method{filter()}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000381\end{methoddesc}
382
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000383\begin{methoddesc}{makeRecord}{name, lvl, fn, lno, msg, args, exc_info}
384This is a factory method which can be overridden in subclasses to create
385specialized \class{LogRecord} instances.
Skip Montanaro649698f2002-11-14 03:57:19 +0000386\end{methoddesc}
387
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000388\subsection{Basic example \label{minimal-example}}
389
390The \module{logging} package provides a lot of flexibility, and its
391configuration can appear daunting. This section demonstrates that simple
392use of the logging package is possible.
393
394The simplest example shows logging to the console:
395
396\begin{verbatim}
397import logging
398
399logging.debug('A debug message')
400logging.info('Some information')
401logging.warning('A shot across the bows')
402\end{verbatim}
403
404If you run the above script, you'll see this:
405\begin{verbatim}
406WARNING:root:A shot across the bows
407\end{verbatim}
408
409Because no particular logger was specified, the system used the root logger.
410The debug and info messages didn't appear because by default, the root
411logger is configured to only handle messages with a severity of WARNING
412or above. The message format is also a configuration default, as is the output
413destination of the messages - \code{sys.stderr}. The severity level,
414the message format and destination can be easily changed, as shown in
415the example below:
416
417\begin{verbatim}
418import logging
419
420logging.basicConfig(level=logging.DEBUG,
Vinay Sajipe3c330b2004-07-07 15:59:49 +0000421 format='%(asctime)s %(levelname)s %(message)s',
422 filename='/tmp/myapp.log',
423 filemode='w')
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000424logging.debug('A debug message')
425logging.info('Some information')
426logging.warning('A shot across the bows')
427\end{verbatim}
428
429The \method{basicConfig()} method is used to change the configuration
430defaults, which results in output (written to \code{/tmp/myapp.log})
431which should look something like the following:
432
433\begin{verbatim}
4342004-07-02 13:00:08,743 DEBUG A debug message
4352004-07-02 13:00:08,743 INFO Some information
4362004-07-02 13:00:08,743 WARNING A shot across the bows
437\end{verbatim}
438
439This time, all messages with a severity of DEBUG or above were handled,
440and the format of the messages was also changed, and output went to the
441specified file rather than the console.
442
443Formatting uses standard Python string formatting - see section
444\ref{typesseq-strings}. The format string takes the following
445common specifiers. For a complete list of specifiers, consult the
446\class{Formatter} documentation.
447
448\begin{tableii}{l|l}{code}{Format}{Description}
449\lineii{\%(name)s} {Name of the logger (logging channel).}
450\lineii{\%(levelname)s}{Text logging level for the message
451 (\code{'DEBUG'}, \code{'INFO'},
452 \code{'WARNING'}, \code{'ERROR'},
453 \code{'CRITICAL'}).}
454\lineii{\%(asctime)s} {Human-readable time when the \class{LogRecord}
455 was created. By default this is of the form
456 ``2003-07-08 16:49:45,896'' (the numbers after the
457 comma are millisecond portion of the time).}
458\lineii{\%(message)s} {The logged message.}
459\end{tableii}
460
461To change the date/time format, you can pass an additional keyword parameter,
462\var{datefmt}, as in the following:
463
464\begin{verbatim}
465import logging
466
467logging.basicConfig(level=logging.DEBUG,
Vinay Sajipe3c330b2004-07-07 15:59:49 +0000468 format='%(asctime)s %(levelname)-8s %(message)s',
469 datefmt='%a, %d %b %Y %H:%M:%S',
470 filename='/temp/myapp.log',
471 filemode='w')
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000472logging.debug('A debug message')
473logging.info('Some information')
474logging.warning('A shot across the bows')
475\end{verbatim}
476
477which would result in output like
478
479\begin{verbatim}
480Fri, 02 Jul 2004 13:06:18 DEBUG A debug message
481Fri, 02 Jul 2004 13:06:18 INFO Some information
482Fri, 02 Jul 2004 13:06:18 WARNING A shot across the bows
483\end{verbatim}
484
485The date format string follows the requirements of \function{strftime()} -
486see the documentation for the \refmodule{time} module.
487
488If, instead of sending logging output to the console or a file, you'd rather
489use a file-like object which you have created separately, you can pass it
490to \function{basicConfig()} using the \var{stream} keyword argument. Note
491that if both \var{stream} and \var{filename} keyword arguments are passed,
492the \var{stream} argument is ignored.
493
Vinay Sajipb4bf62f2004-07-21 14:40:11 +0000494Of course, you can put variable information in your output. To do this,
495simply have the message be a format string and pass in additional arguments
496containing the variable information, as in the following example:
497
498\begin{verbatim}
499import logging
500
501logging.basicConfig(level=logging.DEBUG,
502 format='%(asctime)s %(levelname)-8s %(message)s',
503 datefmt='%a, %d %b %Y %H:%M:%S',
504 filename='/temp/myapp.log',
505 filemode='w')
506logging.error('Pack my box with %d dozen %s', 12, 'liquor jugs')
507\end{verbatim}
508
509which would result in
510
511\begin{verbatim}
512Wed, 21 Jul 2004 15:35:16 ERROR Pack my box with 12 dozen liquor jugs
513\end{verbatim}
514
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000515\subsection{Handler Objects}
Skip Montanaro649698f2002-11-14 03:57:19 +0000516
Fred Drake68e6d572003-01-28 22:02:35 +0000517Handlers have the following attributes and methods. Note that
518\class{Handler} is never instantiated directly; this class acts as a
519base for more useful subclasses. However, the \method{__init__()}
520method in subclasses needs to call \method{Handler.__init__()}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000521
Neal Norwitz6fa635d2003-02-18 14:20:07 +0000522\begin{methoddesc}{__init__}{level=\constant{NOTSET}}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000523Initializes the \class{Handler} instance by setting its level, setting
524the list of filters to the empty list and creating a lock (using
Raymond Hettingerc75c3e02003-09-01 22:50:52 +0000525\method{createLock()}) for serializing access to an I/O mechanism.
Skip Montanaro649698f2002-11-14 03:57:19 +0000526\end{methoddesc}
527
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000528\begin{methoddesc}{createLock}{}
529Initializes a thread lock which can be used to serialize access to
530underlying I/O functionality which may not be threadsafe.
Skip Montanaro649698f2002-11-14 03:57:19 +0000531\end{methoddesc}
532
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000533\begin{methoddesc}{acquire}{}
534Acquires the thread lock created with \method{createLock()}.
535\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000536
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000537\begin{methoddesc}{release}{}
538Releases the thread lock acquired with \method{acquire()}.
539\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000540
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000541\begin{methoddesc}{setLevel}{lvl}
542Sets the threshold for this handler to \var{lvl}. Logging messages which are
543less severe than \var{lvl} will be ignored. When a handler is created, the
Neal Norwitz6fa635d2003-02-18 14:20:07 +0000544level is set to \constant{NOTSET} (which causes all messages to be processed).
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000545\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000546
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000547\begin{methoddesc}{setFormatter}{form}
548Sets the \class{Formatter} for this handler to \var{form}.
549\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000550
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000551\begin{methoddesc}{addFilter}{filt}
552Adds the specified filter \var{filt} to this handler.
553\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000554
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000555\begin{methoddesc}{removeFilter}{filt}
556Removes the specified filter \var{filt} from this handler.
557\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000558
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000559\begin{methoddesc}{filter}{record}
560Applies this handler's filters to the record and returns a true value if
561the record is to be processed.
Skip Montanaro649698f2002-11-14 03:57:19 +0000562\end{methoddesc}
563
564\begin{methoddesc}{flush}{}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000565Ensure all logging output has been flushed. This version does
566nothing and is intended to be implemented by subclasses.
Skip Montanaro649698f2002-11-14 03:57:19 +0000567\end{methoddesc}
568
Skip Montanaro649698f2002-11-14 03:57:19 +0000569\begin{methoddesc}{close}{}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000570Tidy up any resources used by the handler. This version does
571nothing and is intended to be implemented by subclasses.
Skip Montanaro649698f2002-11-14 03:57:19 +0000572\end{methoddesc}
573
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000574\begin{methoddesc}{handle}{record}
575Conditionally emits the specified logging record, depending on
576filters which may have been added to the handler. Wraps the actual
577emission of the record with acquisition/release of the I/O thread
578lock.
Skip Montanaro649698f2002-11-14 03:57:19 +0000579\end{methoddesc}
580
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000581\begin{methoddesc}{handleError}{record}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000582This method should be called from handlers when an exception is
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000583encountered during an \method{emit()} call. By default it does nothing,
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000584which means that exceptions get silently ignored. This is what is
585mostly wanted for a logging system - most users will not care
586about errors in the logging system, they are more interested in
587application errors. You could, however, replace this with a custom
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000588handler if you wish. The specified record is the one which was being
589processed when the exception occurred.
Skip Montanaro649698f2002-11-14 03:57:19 +0000590\end{methoddesc}
591
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000592\begin{methoddesc}{format}{record}
593Do formatting for a record - if a formatter is set, use it.
594Otherwise, use the default formatter for the module.
Skip Montanaro649698f2002-11-14 03:57:19 +0000595\end{methoddesc}
596
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000597\begin{methoddesc}{emit}{record}
598Do whatever it takes to actually log the specified logging record.
599This version is intended to be implemented by subclasses and so
600raises a \exception{NotImplementedError}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000601\end{methoddesc}
602
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000603\subsubsection{StreamHandler}
Skip Montanaro649698f2002-11-14 03:57:19 +0000604
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000605The \class{StreamHandler} class sends logging output to streams such as
606\var{sys.stdout}, \var{sys.stderr} or any file-like object (or, more
607precisely, any object which supports \method{write()} and \method{flush()}
Raymond Hettinger2ef85a72003-01-25 21:46:53 +0000608methods).
Skip Montanaro649698f2002-11-14 03:57:19 +0000609
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000610\begin{classdesc}{StreamHandler}{\optional{strm}}
611Returns a new instance of the \class{StreamHandler} class. If \var{strm} is
612specified, the instance will use it for logging output; otherwise,
613\var{sys.stderr} will be used.
Skip Montanaro649698f2002-11-14 03:57:19 +0000614\end{classdesc}
615
616\begin{methoddesc}{emit}{record}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000617If a formatter is specified, it is used to format the record.
618The record is then written to the stream with a trailing newline.
619If exception information is present, it is formatted using
620\function{traceback.print_exception()} and appended to the stream.
Skip Montanaro649698f2002-11-14 03:57:19 +0000621\end{methoddesc}
622
623\begin{methoddesc}{flush}{}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000624Flushes the stream by calling its \method{flush()} method. Note that
625the \method{close()} method is inherited from \class{Handler} and
626so does nothing, so an explicit \method{flush()} call may be needed
627at times.
Skip Montanaro649698f2002-11-14 03:57:19 +0000628\end{methoddesc}
629
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000630\subsubsection{FileHandler}
Skip Montanaro649698f2002-11-14 03:57:19 +0000631
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000632The \class{FileHandler} class sends logging output to a disk file.
Fred Drake68e6d572003-01-28 22:02:35 +0000633It inherits the output functionality from \class{StreamHandler}.
Skip Montanaro649698f2002-11-14 03:57:19 +0000634
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000635\begin{classdesc}{FileHandler}{filename\optional{, mode}}
636Returns a new instance of the \class{FileHandler} class. The specified
637file is opened and used as the stream for logging. If \var{mode} is
Fred Drake9a5b6a62003-07-08 15:38:40 +0000638not specified, \constant{'a'} is used. By default, the file grows
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000639indefinitely.
Skip Montanaro649698f2002-11-14 03:57:19 +0000640\end{classdesc}
641
642\begin{methoddesc}{close}{}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000643Closes the file.
Skip Montanaro649698f2002-11-14 03:57:19 +0000644\end{methoddesc}
645
646\begin{methoddesc}{emit}{record}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000647Outputs the record to the file.
648\end{methoddesc}
Skip Montanaro649698f2002-11-14 03:57:19 +0000649
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000650\subsubsection{RotatingFileHandler}
Skip Montanaro649698f2002-11-14 03:57:19 +0000651
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000652The \class{RotatingFileHandler} class supports rotation of disk log files.
653
Fred Drake9a5b6a62003-07-08 15:38:40 +0000654\begin{classdesc}{RotatingFileHandler}{filename\optional{, mode\optional{,
655 maxBytes\optional{, backupCount}}}}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000656Returns a new instance of the \class{RotatingFileHandler} class. The
657specified file is opened and used as the stream for logging. If
Fred Drake68e6d572003-01-28 22:02:35 +0000658\var{mode} is not specified, \code{'a'} is used. By default, the
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000659file grows indefinitely.
Andrew M. Kuchling7cf4d9b2003-09-26 13:45:18 +0000660
661You can use the \var{maxBytes} and
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000662\var{backupCount} values to allow the file to \dfn{rollover} at a
663predetermined size. When the size is about to be exceeded, the file is
Andrew M. Kuchling7cf4d9b2003-09-26 13:45:18 +0000664closed and a new file is silently opened for output. Rollover occurs
665whenever the current log file is nearly \var{maxBytes} in length; if
666\var{maxBytes} is zero, rollover never occurs. If \var{backupCount}
667is non-zero, the system will save old log files by appending the
668extensions ".1", ".2" etc., to the filename. For example, with
669a \var{backupCount} of 5 and a base file name of
670\file{app.log}, you would get \file{app.log},
671\file{app.log.1}, \file{app.log.2}, up to \file{app.log.5}. The file being
672written to is always \file{app.log}. When this file is filled, it is
673closed and renamed to \file{app.log.1}, and if files \file{app.log.1},
674\file{app.log.2}, etc. exist, then they are renamed to \file{app.log.2},
Vinay Sajipa13c60b2004-07-03 11:45:53 +0000675\file{app.log.3} etc. respectively.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000676\end{classdesc}
677
678\begin{methoddesc}{doRollover}{}
679Does a rollover, as described above.
680\end{methoddesc}
681
682\begin{methoddesc}{emit}{record}
683Outputs the record to the file, catering for rollover as described
684in \method{setRollover()}.
685\end{methoddesc}
686
687\subsubsection{SocketHandler}
688
689The \class{SocketHandler} class sends logging output to a network
690socket. The base class uses a TCP socket.
691
692\begin{classdesc}{SocketHandler}{host, port}
693Returns a new instance of the \class{SocketHandler} class intended to
694communicate with a remote machine whose address is given by \var{host}
695and \var{port}.
696\end{classdesc}
697
698\begin{methoddesc}{close}{}
699Closes the socket.
700\end{methoddesc}
701
702\begin{methoddesc}{handleError}{}
703\end{methoddesc}
704
705\begin{methoddesc}{emit}{}
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000706Pickles the record's attribute dictionary and writes it to the socket in
707binary format. If there is an error with the socket, silently drops the
708packet. If the connection was previously lost, re-establishes the connection.
Fred Drake6b3b0462004-04-09 18:26:40 +0000709To unpickle the record at the receiving end into a \class{LogRecord}, use the
710\function{makeLogRecord()} function.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000711\end{methoddesc}
712
713\begin{methoddesc}{handleError}{}
714Handles an error which has occurred during \method{emit()}. The
715most likely cause is a lost connection. Closes the socket so that
716we can retry on the next event.
717\end{methoddesc}
718
719\begin{methoddesc}{makeSocket}{}
720This is a factory method which allows subclasses to define the precise
721type of socket they want. The default implementation creates a TCP
722socket (\constant{socket.SOCK_STREAM}).
723\end{methoddesc}
724
725\begin{methoddesc}{makePickle}{record}
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000726Pickles the record's attribute dictionary in binary format with a length
727prefix, and returns it ready for transmission across the socket.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000728\end{methoddesc}
729
730\begin{methoddesc}{send}{packet}
Raymond Hettinger2ef85a72003-01-25 21:46:53 +0000731Send a pickled string \var{packet} to the socket. This function allows
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000732for partial sends which can happen when the network is busy.
733\end{methoddesc}
734
735\subsubsection{DatagramHandler}
736
737The \class{DatagramHandler} class inherits from \class{SocketHandler}
738to support sending logging messages over UDP sockets.
739
740\begin{classdesc}{DatagramHandler}{host, port}
741Returns a new instance of the \class{DatagramHandler} class intended to
742communicate with a remote machine whose address is given by \var{host}
743and \var{port}.
744\end{classdesc}
745
746\begin{methoddesc}{emit}{}
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000747Pickles the record's attribute dictionary and writes it to the socket in
748binary format. If there is an error with the socket, silently drops the
749packet.
Fred Drake6b3b0462004-04-09 18:26:40 +0000750To unpickle the record at the receiving end into a \class{LogRecord}, use the
751\function{makeLogRecord()} function.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000752\end{methoddesc}
753
754\begin{methoddesc}{makeSocket}{}
755The factory method of \class{SocketHandler} is here overridden to create
756a UDP socket (\constant{socket.SOCK_DGRAM}).
757\end{methoddesc}
758
759\begin{methoddesc}{send}{s}
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000760Send a pickled string to a socket.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000761\end{methoddesc}
762
763\subsubsection{SysLogHandler}
764
765The \class{SysLogHandler} class supports sending logging messages to a
Fred Drake68e6d572003-01-28 22:02:35 +0000766remote or local \UNIX{} syslog.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000767
768\begin{classdesc}{SysLogHandler}{\optional{address\optional{, facility}}}
769Returns a new instance of the \class{SysLogHandler} class intended to
Fred Drake68e6d572003-01-28 22:02:35 +0000770communicate with a remote \UNIX{} machine whose address is given by
771\var{address} in the form of a \code{(\var{host}, \var{port})}
772tuple. If \var{address} is not specified, \code{('localhost', 514)} is
773used. The address is used to open a UDP socket. If \var{facility} is
774not specified, \constant{LOG_USER} is used.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000775\end{classdesc}
776
777\begin{methoddesc}{close}{}
778Closes the socket to the remote host.
779\end{methoddesc}
780
781\begin{methoddesc}{emit}{record}
782The record is formatted, and then sent to the syslog server. If
783exception information is present, it is \emph{not} sent to the server.
Skip Montanaro649698f2002-11-14 03:57:19 +0000784\end{methoddesc}
785
786\begin{methoddesc}{encodePriority}{facility, priority}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000787Encodes the facility and priority into an integer. You can pass in strings
788or integers - if strings are passed, internal mapping dictionaries are used
789to convert them to integers.
Skip Montanaro649698f2002-11-14 03:57:19 +0000790\end{methoddesc}
791
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000792\subsubsection{NTEventLogHandler}
Skip Montanaro649698f2002-11-14 03:57:19 +0000793
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000794The \class{NTEventLogHandler} class supports sending logging messages
795to a local Windows NT, Windows 2000 or Windows XP event log. Before
796you can use it, you need Mark Hammond's Win32 extensions for Python
797installed.
Skip Montanaro649698f2002-11-14 03:57:19 +0000798
Fred Drake9a5b6a62003-07-08 15:38:40 +0000799\begin{classdesc}{NTEventLogHandler}{appname\optional{,
800 dllname\optional{, logtype}}}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000801Returns a new instance of the \class{NTEventLogHandler} class. The
802\var{appname} is used to define the application name as it appears in the
803event log. An appropriate registry entry is created using this name.
804The \var{dllname} should give the fully qualified pathname of a .dll or .exe
805which contains message definitions to hold in the log (if not specified,
Fred Drake9a5b6a62003-07-08 15:38:40 +0000806\code{'win32service.pyd'} is used - this is installed with the Win32
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000807extensions and contains some basic placeholder message definitions.
808Note that use of these placeholders will make your event logs big, as the
809entire message source is held in the log. If you want slimmer logs, you have
810to pass in the name of your own .dll or .exe which contains the message
811definitions you want to use in the event log). The \var{logtype} is one of
Fred Drake9a5b6a62003-07-08 15:38:40 +0000812\code{'Application'}, \code{'System'} or \code{'Security'}, and
813defaults to \code{'Application'}.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000814\end{classdesc}
815
816\begin{methoddesc}{close}{}
817At this point, you can remove the application name from the registry as a
818source of event log entries. However, if you do this, you will not be able
819to see the events as you intended in the Event Log Viewer - it needs to be
820able to access the registry to get the .dll name. The current version does
821not do this (in fact it doesn't do anything).
822\end{methoddesc}
823
824\begin{methoddesc}{emit}{record}
825Determines the message ID, event category and event type, and then logs the
826message in the NT event log.
827\end{methoddesc}
828
829\begin{methoddesc}{getEventCategory}{record}
830Returns the event category for the record. Override this if you
831want to specify your own categories. This version returns 0.
832\end{methoddesc}
833
834\begin{methoddesc}{getEventType}{record}
835Returns the event type for the record. Override this if you want
836to specify your own types. This version does a mapping using the
837handler's typemap attribute, which is set up in \method{__init__()}
838to a dictionary which contains mappings for \constant{DEBUG},
839\constant{INFO}, \constant{WARNING}, \constant{ERROR} and
840\constant{CRITICAL}. If you are using your own levels, you will either need
841to override this method or place a suitable dictionary in the
842handler's \var{typemap} attribute.
843\end{methoddesc}
844
845\begin{methoddesc}{getMessageID}{record}
846Returns the message ID for the record. If you are using your
847own messages, you could do this by having the \var{msg} passed to the
848logger being an ID rather than a format string. Then, in here,
849you could use a dictionary lookup to get the message ID. This
850version returns 1, which is the base message ID in
Fred Drake9a5b6a62003-07-08 15:38:40 +0000851\file{win32service.pyd}.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000852\end{methoddesc}
853
854\subsubsection{SMTPHandler}
855
856The \class{SMTPHandler} class supports sending logging messages to an email
857address via SMTP.
858
859\begin{classdesc}{SMTPHandler}{mailhost, fromaddr, toaddrs, subject}
860Returns a new instance of the \class{SMTPHandler} class. The
861instance is initialized with the from and to addresses and subject
862line of the email. The \var{toaddrs} should be a list of strings without
863domain names (That's what the \var{mailhost} is for). To specify a
864non-standard SMTP port, use the (host, port) tuple format for the
865\var{mailhost} argument. If you use a string, the standard SMTP port
866is used.
867\end{classdesc}
868
869\begin{methoddesc}{emit}{record}
870Formats the record and sends it to the specified addressees.
871\end{methoddesc}
872
873\begin{methoddesc}{getSubject}{record}
874If you want to specify a subject line which is record-dependent,
875override this method.
876\end{methoddesc}
877
878\subsubsection{MemoryHandler}
879
880The \class{MemoryHandler} supports buffering of logging records in memory,
881periodically flushing them to a \dfn{target} handler. Flushing occurs
882whenever the buffer is full, or when an event of a certain severity or
883greater is seen.
884
885\class{MemoryHandler} is a subclass of the more general
886\class{BufferingHandler}, which is an abstract class. This buffers logging
887records in memory. Whenever each record is added to the buffer, a
888check is made by calling \method{shouldFlush()} to see if the buffer
889should be flushed. If it should, then \method{flush()} is expected to
890do the needful.
891
892\begin{classdesc}{BufferingHandler}{capacity}
893Initializes the handler with a buffer of the specified capacity.
894\end{classdesc}
895
896\begin{methoddesc}{emit}{record}
897Appends the record to the buffer. If \method{shouldFlush()} returns true,
898calls \method{flush()} to process the buffer.
899\end{methoddesc}
900
901\begin{methoddesc}{flush}{}
Raymond Hettinger2ef85a72003-01-25 21:46:53 +0000902You can override this to implement custom flushing behavior. This version
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000903just zaps the buffer to empty.
904\end{methoddesc}
905
906\begin{methoddesc}{shouldFlush}{record}
907Returns true if the buffer is up to capacity. This method can be
908overridden to implement custom flushing strategies.
909\end{methoddesc}
910
911\begin{classdesc}{MemoryHandler}{capacity\optional{, flushLevel
Neal Norwitz6fa635d2003-02-18 14:20:07 +0000912\optional{, target}}}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000913Returns a new instance of the \class{MemoryHandler} class. The
914instance is initialized with a buffer size of \var{capacity}. If
915\var{flushLevel} is not specified, \constant{ERROR} is used. If no
916\var{target} is specified, the target will need to be set using
917\method{setTarget()} before this handler does anything useful.
918\end{classdesc}
919
920\begin{methoddesc}{close}{}
921Calls \method{flush()}, sets the target to \constant{None} and
922clears the buffer.
923\end{methoddesc}
924
925\begin{methoddesc}{flush}{}
926For a \class{MemoryHandler}, flushing means just sending the buffered
927records to the target, if there is one. Override if you want
Raymond Hettinger2ef85a72003-01-25 21:46:53 +0000928different behavior.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000929\end{methoddesc}
930
931\begin{methoddesc}{setTarget}{target}
932Sets the target handler for this handler.
933\end{methoddesc}
934
935\begin{methoddesc}{shouldFlush}{record}
936Checks for buffer full or a record at the \var{flushLevel} or higher.
937\end{methoddesc}
938
939\subsubsection{HTTPHandler}
940
941The \class{HTTPHandler} class supports sending logging messages to a
Fred Drake68e6d572003-01-28 22:02:35 +0000942Web server, using either \samp{GET} or \samp{POST} semantics.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000943
944\begin{classdesc}{HTTPHandler}{host, url\optional{, method}}
945Returns a new instance of the \class{HTTPHandler} class. The
946instance is initialized with a host address, url and HTTP method.
Fred Drake68e6d572003-01-28 22:02:35 +0000947If no \var{method} is specified, \samp{GET} is used.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000948\end{classdesc}
949
950\begin{methoddesc}{emit}{record}
951Sends the record to the Web server as an URL-encoded dictionary.
952\end{methoddesc}
953
954\subsection{Formatter Objects}
955
956\class{Formatter}s have the following attributes and methods. They are
957responsible for converting a \class{LogRecord} to (usually) a string
958which can be interpreted by either a human or an external system. The
959base
960\class{Formatter} allows a formatting string to be specified. If none is
Fred Drake8efc74d2004-04-15 06:18:48 +0000961supplied, the default value of \code{'\%(message)s'} is used.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000962
963A Formatter can be initialized with a format string which makes use of
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +0000964knowledge of the \class{LogRecord} attributes - such as the default value
965mentioned above making use of the fact that the user's message and
Fred Drake6b3b0462004-04-09 18:26:40 +0000966arguments are pre-formatted into a \class{LogRecord}'s \var{message}
Anthony Baxtera6b7d342003-07-08 08:40:20 +0000967attribute. This format string contains standard python \%-style
968mapping keys. See section \ref{typesseq-strings}, ``String Formatting
969Operations,'' for more information on string formatting.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +0000970
Fred Drake6b3b0462004-04-09 18:26:40 +0000971Currently, the useful mapping keys in a \class{LogRecord} are:
Anthony Baxtera6b7d342003-07-08 08:40:20 +0000972
Fred Drake9a5b6a62003-07-08 15:38:40 +0000973\begin{tableii}{l|l}{code}{Format}{Description}
974\lineii{\%(name)s} {Name of the logger (logging channel).}
975\lineii{\%(levelno)s} {Numeric logging level for the message
976 (\constant{DEBUG}, \constant{INFO},
977 \constant{WARNING}, \constant{ERROR},
978 \constant{CRITICAL}).}
979\lineii{\%(levelname)s}{Text logging level for the message
980 (\code{'DEBUG'}, \code{'INFO'},
981 \code{'WARNING'}, \code{'ERROR'},
982 \code{'CRITICAL'}).}
983\lineii{\%(pathname)s} {Full pathname of the source file where the logging
984 call was issued (if available).}
985\lineii{\%(filename)s} {Filename portion of pathname.}
986\lineii{\%(module)s} {Module (name portion of filename).}
987\lineii{\%(lineno)d} {Source line number where the logging call was issued
988 (if available).}
Fred Drake6b3b0462004-04-09 18:26:40 +0000989\lineii{\%(created)f} {Time when the \class{LogRecord} was created (as
Fred Drake9a5b6a62003-07-08 15:38:40 +0000990 returned by \function{time.time()}).}
Fred Drake6b3b0462004-04-09 18:26:40 +0000991\lineii{\%(asctime)s} {Human-readable time when the \class{LogRecord}
992 was created. By default this is of the form
Fred Drake9a5b6a62003-07-08 15:38:40 +0000993 ``2003-07-08 16:49:45,896'' (the numbers after the
994 comma are millisecond portion of the time).}
995\lineii{\%(msecs)d} {Millisecond portion of the time when the
996 \class{LogRecord} was created.}
997\lineii{\%(thread)d} {Thread ID (if available).}
998\lineii{\%(process)d} {Process ID (if available).}
999\lineii{\%(message)s} {The logged message, computed as \code{msg \% args}.}
Anthony Baxtera6b7d342003-07-08 08:40:20 +00001000\end{tableii}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001001
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001002\begin{classdesc}{Formatter}{\optional{fmt\optional{, datefmt}}}
1003Returns a new instance of the \class{Formatter} class. The
1004instance is initialized with a format string for the message as a whole,
1005as well as a format string for the date/time portion of a message. If
Neal Norwitzdd3afa72003-07-08 16:26:34 +00001006no \var{fmt} is specified, \code{'\%(message)s'} is used. If no \var{datefmt}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001007is specified, the ISO8601 date format is used.
1008\end{classdesc}
1009
1010\begin{methoddesc}{format}{record}
1011The record's attribute dictionary is used as the operand to a
1012string formatting operation. Returns the resulting string.
1013Before formatting the dictionary, a couple of preparatory steps
1014are carried out. The \var{message} attribute of the record is computed
1015using \var{msg} \% \var{args}. If the formatting string contains
Fred Drake9a5b6a62003-07-08 15:38:40 +00001016\code{'(asctime)'}, \method{formatTime()} is called to format the
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001017event time. If there is exception information, it is formatted using
1018\method{formatException()} and appended to the message.
1019\end{methoddesc}
1020
1021\begin{methoddesc}{formatTime}{record\optional{, datefmt}}
1022This method should be called from \method{format()} by a formatter which
1023wants to make use of a formatted time. This method can be overridden
1024in formatters to provide for any specific requirement, but the
Raymond Hettinger2ef85a72003-01-25 21:46:53 +00001025basic behavior is as follows: if \var{datefmt} (a string) is specified,
Fred Drakec23e0192003-01-28 22:09:16 +00001026it is used with \function{time.strftime()} to format the creation time of the
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001027record. Otherwise, the ISO8601 format is used. The resulting
1028string is returned.
1029\end{methoddesc}
1030
1031\begin{methoddesc}{formatException}{exc_info}
1032Formats the specified exception information (a standard exception tuple
Fred Drakec23e0192003-01-28 22:09:16 +00001033as returned by \function{sys.exc_info()}) as a string. This default
1034implementation just uses \function{traceback.print_exception()}.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001035The resulting string is returned.
1036\end{methoddesc}
1037
1038\subsection{Filter Objects}
1039
1040\class{Filter}s can be used by \class{Handler}s and \class{Logger}s for
1041more sophisticated filtering than is provided by levels. The base filter
1042class only allows events which are below a certain point in the logger
1043hierarchy. For example, a filter initialized with "A.B" will allow events
1044logged by loggers "A.B", "A.B.C", "A.B.C.D", "A.B.D" etc. but not "A.BB",
1045"B.A.B" etc. If initialized with the empty string, all events are passed.
1046
1047\begin{classdesc}{Filter}{\optional{name}}
1048Returns an instance of the \class{Filter} class. If \var{name} is specified,
1049it names a logger which, together with its children, will have its events
1050allowed through the filter. If no name is specified, allows every event.
1051\end{classdesc}
1052
1053\begin{methoddesc}{filter}{record}
1054Is the specified record to be logged? Returns zero for no, nonzero for
1055yes. If deemed appropriate, the record may be modified in-place by this
1056method.
1057\end{methoddesc}
1058
1059\subsection{LogRecord Objects}
1060
Fred Drake6b3b0462004-04-09 18:26:40 +00001061\class{LogRecord} instances are created every time something is logged. They
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001062contain all the information pertinent to the event being logged. The
1063main information passed in is in msg and args, which are combined
1064using msg \% args to create the message field of the record. The record
1065also includes information such as when the record was created, the
1066source line where the logging call was made, and any exception
1067information to be logged.
1068
Fred Drake6b3b0462004-04-09 18:26:40 +00001069\class{LogRecord} has no methods; it's just a repository for
1070information about the logging event. The only reason it's a class
1071rather than a dictionary is to facilitate extension.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001072
1073\begin{classdesc}{LogRecord}{name, lvl, pathname, lineno, msg, args,
Fred Drake9a5b6a62003-07-08 15:38:40 +00001074 exc_info}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001075Returns an instance of \class{LogRecord} initialized with interesting
1076information. The \var{name} is the logger name; \var{lvl} is the
1077numeric level; \var{pathname} is the absolute pathname of the source
1078file in which the logging call was made; \var{lineno} is the line
1079number in that file where the logging call is found; \var{msg} is the
1080user-supplied message (a format string); \var{args} is the tuple
1081which, together with \var{msg}, makes up the user message; and
1082\var{exc_info} is the exception tuple obtained by calling
1083\function{sys.exc_info() }(or \constant{None}, if no exception information
1084is available).
1085\end{classdesc}
1086
1087\subsection{Thread Safety}
1088
1089The logging module is intended to be thread-safe without any special work
1090needing to be done by its clients. It achieves this though using threading
1091locks; there is one lock to serialize access to the module's shared data,
1092and each handler also creates a lock to serialize access to its underlying
1093I/O.
1094
1095\subsection{Configuration}
1096
1097
Fred Drake94ffbb72004-04-08 19:44:31 +00001098\subsubsection{Configuration functions%
1099 \label{logging-config-api}}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001100
Fred Drake9a5b6a62003-07-08 15:38:40 +00001101The following functions allow the logging module to be
1102configured. Before they can be used, you must import
1103\module{logging.config}. Their use is optional --- you can configure
1104the logging module entirely by making calls to the main API (defined
1105in \module{logging} itself) and defining handlers which are declared
Raymond Hettinger6f3eaa62003-06-27 21:43:39 +00001106either in \module{logging} or \module{logging.handlers}.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001107
1108\begin{funcdesc}{fileConfig}{fname\optional{, defaults}}
1109Reads the logging configuration from a ConfigParser-format file named
1110\var{fname}. This function can be called several times from an application,
1111allowing an end user the ability to select from various pre-canned
1112configurations (if the developer provides a mechanism to present the
1113choices and load the chosen configuration). Defaults to be passed to
1114ConfigParser can be specified in the \var{defaults} argument.
1115\end{funcdesc}
1116
1117\begin{funcdesc}{listen}{\optional{port}}
1118Starts up a socket server on the specified port, and listens for new
1119configurations. If no port is specified, the module's default
1120\constant{DEFAULT_LOGGING_CONFIG_PORT} is used. Logging configurations
1121will be sent as a file suitable for processing by \function{fileConfig()}.
1122Returns a \class{Thread} instance on which you can call \method{start()}
1123to start the server, and which you can \method{join()} when appropriate.
1124To stop the server, call \function{stopListening()}.
1125\end{funcdesc}
1126
1127\begin{funcdesc}{stopListening}{}
1128Stops the listening server which was created with a call to
1129\function{listen()}. This is typically called before calling \method{join()}
1130on the return value from \function{listen()}.
1131\end{funcdesc}
1132
Fred Drake94ffbb72004-04-08 19:44:31 +00001133\subsubsection{Configuration file format%
1134 \label{logging-config-fileformat}}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001135
Fred Drake6b3b0462004-04-09 18:26:40 +00001136The configuration file format understood by \function{fileConfig()} is
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001137based on ConfigParser functionality. The file must contain sections
1138called \code{[loggers]}, \code{[handlers]} and \code{[formatters]}
1139which identify by name the entities of each type which are defined in
1140the file. For each such entity, there is a separate section which
1141identified how that entity is configured. Thus, for a logger named
1142\code{log01} in the \code{[loggers]} section, the relevant
1143configuration details are held in a section
1144\code{[logger_log01]}. Similarly, a handler called \code{hand01} in
1145the \code{[handlers]} section will have its configuration held in a
1146section called \code{[handler_hand01]}, while a formatter called
1147\code{form01} in the \code{[formatters]} section will have its
1148configuration specified in a section called
1149\code{[formatter_form01]}. The root logger configuration must be
1150specified in a section called \code{[logger_root]}.
1151
1152Examples of these sections in the file are given below.
Skip Montanaro649698f2002-11-14 03:57:19 +00001153
1154\begin{verbatim}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001155[loggers]
1156keys=root,log02,log03,log04,log05,log06,log07
Skip Montanaro649698f2002-11-14 03:57:19 +00001157
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001158[handlers]
1159keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09
1160
1161[formatters]
1162keys=form01,form02,form03,form04,form05,form06,form07,form08,form09
Skip Montanaro649698f2002-11-14 03:57:19 +00001163\end{verbatim}
1164
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001165The root logger must specify a level and a list of handlers. An
1166example of a root logger section is given below.
Skip Montanaro649698f2002-11-14 03:57:19 +00001167
1168\begin{verbatim}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001169[logger_root]
1170level=NOTSET
1171handlers=hand01
Skip Montanaro649698f2002-11-14 03:57:19 +00001172\end{verbatim}
1173
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001174The \code{level} entry can be one of \code{DEBUG, INFO, WARNING,
1175ERROR, CRITICAL} or \code{NOTSET}. For the root logger only,
1176\code{NOTSET} means that all messages will be logged. Level values are
1177\function{eval()}uated in the context of the \code{logging} package's
1178namespace.
Skip Montanaro649698f2002-11-14 03:57:19 +00001179
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001180The \code{handlers} entry is a comma-separated list of handler names,
1181which must appear in the \code{[handlers]} section. These names must
1182appear in the \code{[handlers]} section and have corresponding
1183sections in the configuration file.
Skip Montanaro649698f2002-11-14 03:57:19 +00001184
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001185For loggers other than the root logger, some additional information is
1186required. This is illustrated by the following example.
Skip Montanaro649698f2002-11-14 03:57:19 +00001187
1188\begin{verbatim}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001189[logger_parser]
1190level=DEBUG
1191handlers=hand01
1192propagate=1
1193qualname=compiler.parser
Skip Montanaro649698f2002-11-14 03:57:19 +00001194\end{verbatim}
1195
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001196The \code{level} and \code{handlers} entries are interpreted as for
1197the root logger, except that if a non-root logger's level is specified
1198as \code{NOTSET}, the system consults loggers higher up the hierarchy
1199to determine the effective level of the logger. The \code{propagate}
1200entry is set to 1 to indicate that messages must propagate to handlers
1201higher up the logger hierarchy from this logger, or 0 to indicate that
1202messages are \strong{not} propagated to handlers up the hierarchy. The
1203\code{qualname} entry is the hierarchical channel name of the logger,
Vinay Sajipa13c60b2004-07-03 11:45:53 +00001204that is to say the name used by the application to get the logger.
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001205
1206Sections which specify handler configuration are exemplified by the
1207following.
1208
Skip Montanaro649698f2002-11-14 03:57:19 +00001209\begin{verbatim}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001210[handler_hand01]
1211class=StreamHandler
1212level=NOTSET
1213formatter=form01
1214args=(sys.stdout,)
Skip Montanaro649698f2002-11-14 03:57:19 +00001215\end{verbatim}
1216
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001217The \code{class} entry indicates the handler's class (as determined by
1218\function{eval()} in the \code{logging} package's namespace). The
1219\code{level} is interpreted as for loggers, and \code{NOTSET} is taken
1220to mean "log everything".
1221
1222The \code{formatter} entry indicates the key name of the formatter for
1223this handler. If blank, a default formatter
1224(\code{logging._defaultFormatter}) is used. If a name is specified, it
1225must appear in the \code{[formatters]} section and have a
1226corresponding section in the configuration file.
1227
1228The \code{args} entry, when \function{eval()}uated in the context of
1229the \code{logging} package's namespace, is the list of arguments to
1230the constructor for the handler class. Refer to the constructors for
1231the relevant handlers, or to the examples below, to see how typical
1232entries are constructed.
Skip Montanaro649698f2002-11-14 03:57:19 +00001233
1234\begin{verbatim}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001235[handler_hand02]
1236class=FileHandler
1237level=DEBUG
1238formatter=form02
1239args=('python.log', 'w')
1240
1241[handler_hand03]
1242class=handlers.SocketHandler
1243level=INFO
1244formatter=form03
1245args=('localhost', handlers.DEFAULT_TCP_LOGGING_PORT)
1246
1247[handler_hand04]
1248class=handlers.DatagramHandler
1249level=WARN
1250formatter=form04
1251args=('localhost', handlers.DEFAULT_UDP_LOGGING_PORT)
1252
1253[handler_hand05]
1254class=handlers.SysLogHandler
1255level=ERROR
1256formatter=form05
1257args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)
1258
1259[handler_hand06]
Vinay Sajip20f42c42004-07-12 15:48:04 +00001260class=handlers.NTEventLogHandler
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001261level=CRITICAL
1262formatter=form06
1263args=('Python Application', '', 'Application')
1264
1265[handler_hand07]
Vinay Sajip20f42c42004-07-12 15:48:04 +00001266class=handlers.SMTPHandler
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001267level=WARN
1268formatter=form07
1269args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
1270
1271[handler_hand08]
Vinay Sajip20f42c42004-07-12 15:48:04 +00001272class=handlers.MemoryHandler
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001273level=NOTSET
1274formatter=form08
1275target=
1276args=(10, ERROR)
1277
1278[handler_hand09]
Vinay Sajip20f42c42004-07-12 15:48:04 +00001279class=handlers.HTTPHandler
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001280level=NOTSET
1281formatter=form09
1282args=('localhost:9022', '/log', 'GET')
Skip Montanaro649698f2002-11-14 03:57:19 +00001283\end{verbatim}
Neal Norwitzcd5c8c22003-01-25 21:29:41 +00001284
1285Sections which specify formatter configuration are typified by the following.
1286
1287\begin{verbatim}
1288[formatter_form01]
1289format=F1 %(asctime)s %(levelname)s %(message)s
1290datefmt=
1291\end{verbatim}
1292
1293The \code{format} entry is the overall format string, and the
1294\code{datefmt} entry is the \function{strftime()}-compatible date/time format
1295string. If empty, the package substitutes ISO8601 format date/times, which
1296is almost equivalent to specifying the date format string "%Y-%m-%d %H:%M:%S".
1297The ISO8601 format also specifies milliseconds, which are appended to the
1298result of using the above format string, with a comma separator. An example
1299time in ISO8601 format is \code{2003-01-23 00:29:50,411}.