Ответ 1
Как уже упоминалось, обработчики настолько просты в создании и добавляют, что вам, вероятно, лучше всего использовать два обработчика. Если, однако, по какой-то причине вы хотите придерживаться одного, Кулинарная книга по протоколу Python содержит раздел, описывающий больше или меньше того, что вы хотите сделать: вход в консоль и файл, но на разных уровнях (он даже показывает вам, как делать разное форматирование). Он делает это только с одним StreamHandler
, а не с FileHandler
:
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.')
Изменить: Как обсуждалось в комментариях, этот код по-прежнему генерирует два обработчика, но "скрывает" одну конструкцию с помощью basicConfig(). Я настоятельно рекомендую вам создать оба явно.