Это то, что я использую со всеми моими приложениями командной строки 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')
Whenrun из командыВ строке мы можем видеть различия в зарегистрированных уровнях.
-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