这是我在所有 Python 命令行应用程序中使用的东西。这有点冗长,但是您应该能够获得一个接受可选参数的记录器,以在任何级别创建控制台记录器,而不管记录到文件的内容是什么:
#!/usr/bin/env python
import logging
from argparse import ArgumentParser
COMPANY_LOGGER = 'COMPANY.Python.Logger'
CONSL_LEVEL_RANGE = range(0, 51)
LOG_FILE = 'company.log'
FORMAT_STR = '%(asctime)s %(levelname)s %(message)s'
parser = ArgumentParser()
parser.add_argument('-c', '--console-log', metavar='ARG',
type=int, choices=range(0, 51),
action='store', dest='console_log',
default=None,
help='Adds a console logger for the level specified in the range 1..50')
args = parser.parse_args()
# Create logger
logger = logging.getLogger(COMPANY_LOGGER)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(FORMAT_STR)
# Add FileHandler and only log WARNING and higher
fh = logging.FileHandler(LOG_FILE)
fh.name = 'File Logger'
fh.level = logging.WARNING
fh.formatter = formatter
logger.addHandler(fh)
# Add optional ConsoleHandler
if args.console_log:
ch = logging.StreamHandler()
ch.name = 'Console Logger'
ch.level = args.console_log
ch.formatter = formatter
logger.addHandler(ch)
logger.debug('DEBUG')
logger.info('INFO')
logger.warning('WARNING')
logger.critical('CRITICAL')
从命令行运行时,我们可以看到记录级别的差异。
-c1
相当于“DEBUG 及更高级别”(最详细),但 company.log 仍然只记录 WARNING 及更高级别:
~ zacharyyoung$ ./so.py -c1
2012-01-12 08:59:50,086 DEBUG DEBUG
2012-01-12 08:59:50,086 INFO INFO
2012-01-12 08:59:50,087 WARNING WARNING
2012-01-12 08:59:50,087 CRITICAL CRITICAL
~ zacharyyoung$ cat company.log
2012-01-12 08:59:50,087 WARNING WARNING
2012-01-12 08:59:50,087 CRITICAL CRITICAL
-c20
等于信息:
~ zacharyyoung$ ./so.py -c20
2012-01-12 09:00:09,393 INFO INFO
2012-01-12 09:00:09,393 WARNING WARNING
2012-01-12 09:00:09,393 CRITICAL CRITICAL
~ zacharyyoung$ cat company.log
2012-01-12 08:59:50,087 WARNING WARNING
2012-01-12 08:59:50,087 CRITICAL CRITICAL
2012-01-12 09:00:09,393 WARNING WARNING
2012-01-12 09:00:09,393 CRITICAL CRITICAL