Added example of multiple destinations

This commit is contained in:
Vinay Sajip 2004-10-22 21:43:15 +00:00
parent 06a30b087e
commit 93ae4c100e
1 changed files with 66 additions and 2 deletions

View File

@ -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