python/dist/src/Doc/lib liblogging.tex,1.27,1.28
Update of /cvsroot/python/python/dist/src/Doc/lib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23865 Modified Files: liblogging.tex Log Message: Added example of multiple destinations Index: liblogging.tex =================================================================== RCS file: /cvsroot/python/python/dist/src/Doc/lib/liblogging.tex,v retrieving revision 1.27 retrieving revision 1.28 diff -u -d -r1.27 -r1.28 --- liblogging.tex 3 Oct 2004 19:10:05 -0000 1.27 +++ liblogging.tex 22 Oct 2004 21:43:15 -0000 1.28 @@ -507,15 +507,79 @@ 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
participants (1)
-
vsajip@users.sourceforge.net