mirror of
https://github.com/python/cpython.git
synced 2025-11-03 11:23:31 +00:00
Added example of multiple destinations
This commit is contained in:
parent
06a30b087e
commit
93ae4c100e
1 changed files with 66 additions and 2 deletions
|
|
@ -507,15 +507,79 @@ logging.basicConfig(level=logging.DEBUG,
|
||||||
datefmt='%a, %d %b %Y %H:%M:%S',
|
datefmt='%a, %d %b %Y %H:%M:%S',
|
||||||
filename='/temp/myapp.log',
|
filename='/temp/myapp.log',
|
||||||
filemode='w')
|
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}
|
\end{verbatim}
|
||||||
|
|
||||||
which would result in
|
which would result in
|
||||||
|
|
||||||
\begin{verbatim}
|
\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}
|
\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}
|
\subsection{Handler Objects}
|
||||||
|
|
||||||
Handlers have the following attributes and methods. Note that
|
Handlers have the following attributes and methods. Note that
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue