Based on this answer, Easier way to enable verbose logging
Let's take this Python script.
import argparse
import logging
def main():
import argparse
import logging
parser = argparse.ArgumentParser(
description='A test script for http://stackoverflow.com/q/14097061/78845'
)
parser.add_argument("-v", "--verbose", help="increase output verbosity",
action="store_true")
args = parser.parse_args()
if args.verbose:
logging.basicConfig(level=logging.DEBUG)
logging.info('Shown in debug and info mode')
logging.debug('Only shown in debug mode')
if __name__ == "__main__":
logging.info('Starting script!')
main()
Running this script from terminal as python -m verbose -v
won't print anything.
If you comment the line logging.info('Starting script!')
from the file as in
if __name__ == "__main__":
#logging.info('Starting script!')
main()
then logging works as expected.
It looks like an attempt to call a logging.info()
before basicConfig
is defined will fully disable any logging.
Is it a bug in logging
or a common gotcha and why does this happen?
I am on Python 3.6.7.