Ответ 1
Вы пытаетесь воспроизвести плохо что-то, что хорошо сделано в стандартной библиотеке Python; пожалуйста, проверьте модуль протоколирования.
С помощью этого модуля вы можете делать именно то, что хотите, но гораздо проще, стандартно и расширяемо. Вы можете действовать следующим образом (этот пример является копией/вставкой из журнальной книги):
Предположим, вы хотите войти в консоль и файл с другим сообщением форматов и в разных обстоятельствах. Предположим, вы хотите регистрировать сообщения с уровнями DEBUG и выше в файл, а те сообщения на уровне INFO и выше на консоль. Предположим также, что файл должен содержат временные метки, но сообщения консоли не должны. Вот как вы можете достичь этого:
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.')
Когда вы запустите это, на консоли вы увидите
root : INFO Jackdaws love my big sphinx of quartz.
myapp.area1 : INFO How quickly daft jumping zebras vex.
myapp.area2 : WARNING Jail zesty vixen who grabbed pay from quack.
myapp.area2 : ERROR The five boxing wizards jump quickly.
и в файле вы увидите что-то вроде
10-22 22:19 root INFO Jackdaws love my big sphinx of quartz.
10-22 22:19 myapp.area1 DEBUG Quick zephyrs blow, vexing daft Jim.
10-22 22:19 myapp.area1 INFO How quickly daft jumping zebras vex.
10-22 22:19 myapp.area2 WARNING Jail zesty vixen who grabbed pay from quack.
10-22 22:19 myapp.area2 ERROR The five boxing wizards jump quickly.
Как вы можете видеть, сообщение DEBUG отображается только в файле. Другой сообщения отправляются в оба пункта назначения.
В этом примере используются консоли и обработчики файлов, но вы можете использовать любые количество и комбинацию выбранных вами обработчиков.