[Python-Dev] Using logging in the stdlib and its unit tests
Nick Coghlan
ncoghlan at gmail.com
Sat Dec 11 10:07:55 CET 2010
On Sat, Dec 11, 2010 at 3:06 PM, Nick Coghlan <ncoghlan at gmail.com> wrote:
> However, the confusion that this setup will engender is that
> encountered by Bill: by default, info() messages are silenced rather
> than displayed on stdout.
>
> Notice that even the recommended "basicConfig" approach to resolving
> this is subtly flawed, since your choices are to either display info
> messages on stderr (by specifying just a level argument) or to
> redirect warning() et al to stdout instead of stderr (by also
> specifying a stream argument). The "correct" answer (info and below to
> stdout, warning and above to stderr) is actually quite tricky to set
> up, since handlers have no innate concept of a "maximum level", so you
> have to provide a filter function (more on that below [1]).
I need to correct this comment, since it's wrong and
basicConfig(level=logging.INFO) actually does the right thing.
As Glenn mentioned later in the thread, the output of logging.info and
logging.debug messages is *distinct* from an application's normal
operational output that is emitted on stdout. So making it easy to
emit such messages on stderr is the right thing to do - it's OK that
it requires a bit of additional set up to get them onto stdout instead
(since they really don't belong there most of the time).
I know my own rule of thumb is going to be updated along the lines of
"Am I writing to sys.stderr, or guarding output with a verbosity flag?
Then perhaps I should be using the logging module rather than print
statements".
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
More information about the Python-Dev
mailing list