Я пытаюсь реализовать ведение журнала в моих приложениях Python 2.7 и нашел его очень полезным. Однако я заметил, что при интерактивном запуске Python каждое сообщение журнала печатается несколько раз. Количество раз, когда сообщение печатается, совпадает с количеством раз, которое я ранее запускал сценарий, поэтому кажется, что регистратор не очищается должным образом в конце сценария (я бы предположил). Рассмотрим следующий пример:
import sys
import logging
def main(argv=None):
log = logging.getLogger('test')
log.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter("%(message)s"))
log.addHandler(console_handler)
log.info('Starting something...')
log.info('Doing something...')
log.info('Finished something.')
logging.shutdown()
if __name__=='__main__':
sys.exit(main(sys.argv[1:]))
Typing
>>> import file.py
>>> file.main()
дает следующее:
Starting something...
Doing something...
Finished something.
Затем, набрав file.main()
во второй раз, вы получите:
Starting something...
Starting something...
Doing something...
Doing something...
Finished something.
Finished something.
Повторение в третий раз даст три или каждое сообщение и так далее. Кто-нибудь знает, почему это происходит - это ожидаемое поведение модуля ведения журнала и, если да, как я могу это изменить? Приведенный выше сценарий печатает только одно сообщение, если выполняется как сценарий (python file.py
), как и ожидалось.