我有一個Python 3.4應用程序廣泛使用日誌記錄。我有兩個FileHandler和一個StreamHandler註冊。一切都按預期工作,除了有時,它似乎發生在requests
庫引發異常之後,日誌文件會丟失所有累積的消息並以新消息開始。我假設由於某種原因FileHandlers重新打開mode='w'
文件,但我不明白爲什麼。有任何想法嗎?爲什麼Python日誌框架會丟失消息?
主要程序設置記錄儀如下:
# Set up root logger - two handlers logging to files
fh_debug = logging.FileHandler('Syncer.debug', mode='w', encoding='utf-8')
fh_debug.setLevel(logging.DEBUG)
fh_log = logging.FileHandler('Syncer.log', mode='w', encoding='utf-8')
fh_log.setLevel(logging.INFO)
fh_formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
fh_debug.setFormatter(fh_formatter)
fh_log.setFormatter(fh_formatter)
logging.getLogger().addHandler(fh_debug)
logging.getLogger().addHandler(fh_log)
# Add console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.INFO)
ch_formatter = logging.Formatter('%(message)s')
ch.setFormatter(ch_formatter)
logging.getLogger().addHandler(ch)
# Need to set the logging level of the logger as well as the handlers
logging.getLogger().setLevel(logging.DEBUG)
# Set up the logger for this module
logger = logging.getLogger("Syncer")
logger.debug('Logger started.')
模塊只包含
logger = logging.getLogger(__name__)
做了像也許導入主文件用於其他目的是異常處理程序發生的呢?你可以保留一組文件(Syncer.debug.0,Syncer.debug.1等),以便你有更多的歷史。 – tdelaney
我還沒有創建一個異常處理程序。一個快速解決方法是打開與模式='a'的文件。但是,理解發生的事情會很好。 –