From 93ae4c100e85acc8d299abdc267f2b8df61f4813 Mon Sep 17 00:00:00 2001 From: Vinay Sajip Date: Fri, 22 Oct 2004 21:43:15 +0000 Subject: [PATCH] Added example of multiple destinations --- Doc/lib/liblogging.tex | 68 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/Doc/lib/liblogging.tex b/Doc/lib/liblogging.tex index 2e857d9518f..1fcd231c54c 100644 --- a/Doc/lib/liblogging.tex +++ b/Doc/lib/liblogging.tex @@ -507,15 +507,79 @@ logging.basicConfig(level=logging.DEBUG, datefmt='%a, %d %b %Y %H:%M:%S', filename='/temp/myapp.log', filemode='w') -logging.error('Pack my box with %d dozen %s', 12, 'liquor jugs') +logging.error('Pack my box with %d dozen %s', 5, 'liquor jugs') \end{verbatim} which would result in \begin{verbatim} -Wed, 21 Jul 2004 15:35:16 ERROR Pack my box with 12 dozen liquor jugs +Wed, 21 Jul 2004 15:35:16 ERROR Pack my box with 5 dozen liquor jugs \end{verbatim} +\subsection{Logging to multiple destinations \label{multiple-destinations}} + +Let's say you want to log to console and file with different message formats +and in differing circumstances. Say you want to log messages with levels +of DEBUG and higher to file, and those messages at level INFO and higher to +the console. Let's also assume that the file should contain timestamps, but +the console messages should not. Here's how you can achieve this: + +\begin{verbatim} +import logging + +#set up logging to file - see previous section for more details +logging.basicConfig(level=logging.DEBUG, + format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s', + datefmt='%m-%d %H:%M', + filename='/temp/myapp.log', + filemode='w') +#define a Handler which writes INFO messages or higher to the sys.stderr +console = logging.StreamHandler() +console.setLevel(logging.INFO) +#set a format which is simpler for console use +formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s') +#tell the handler to use this format +console.setFormatter(formatter) +#add the handler to the root logger +logging.getLogger('').addHandler(console) + +#Now, we can log to the root logger, or any other logger. First the root... +logging.info('Jackdaws love my big sphinx of quartz.') + +#Now, define a couple of other loggers which might represent areas in your +#application: + +logger1 = logging.getLogger('myapp.area1') +logger2 = logging.getLogger('myapp.area2') + +logger1.debug('Quick zephyrs blow, vexing daft Jim.') +logger1.info('How quickly daft jumping zebras vex.') +logger2.warning('Jail zesty vixen who grabbed pay from quack.') +logger2.error('The five boxing wizards jump quickly.') +\end{verbatim} + +When you run this, on the console you will see + +\begin{verbatim} +root : INFO Jackdaws love my big sphinx of quartz. +myapp.area1 : INFO How quickly daft jumping zebras vex. +myapp.area2 : WARNING Jail zesty vixen who grabbed pay from quack. +myapp.area2 : ERROR The five boxing wizards jump quickly. +\end{verbatim} + +and in the file you will see something like + +\begin{verbatim} +10-22 22:19 root INFO Jackdaws love my big sphinx of quartz. +10-22 22:19 myapp.area1 DEBUG Quick zephyrs blow, vexing daft Jim. +10-22 22:19 myapp.area1 INFO How quickly daft jumping zebras vex. +10-22 22:19 myapp.area2 WARNING Jail zesty vixen who grabbed pay from quack. +10-22 22:19 myapp.area2 ERROR The five boxing wizards jump quickly. +\end{verbatim} + +As you can see, the DEBUG message only shows up in the file. The other +messages are sent to both destinations. + \subsection{Handler Objects} Handlers have the following attributes and methods. Note that