我已經通過日誌記錄模塊文檔閱讀,雖然我可能錯過了一些明顯的東西,我得到的代碼似乎沒有按預期工作。我正在使用Python 2.6.4。Python記錄多個文件
我的程序由幾個不同的python文件組成,我想從中發送日誌消息到文本文件以及潛在的屏幕。我想這是一件很平常的事情,所以我把它搞亂了。
我的代碼正在做的事情是在正確地記錄到文本文件中。但是登錄屏幕正在被複制,其中一個是指定的格式,另一個沒有。另外,當我關閉屏幕輸出時,我仍然獲得一次打印的文本,我不想 - 我只是希望它被記錄到文件中。
不管怎麼說,一些代碼:
#logger.py
import logging
from logging.handlers import RotatingFileHandler
import os
def setup_logging(logdir=None, scrnlog=True, txtlog=True, loglevel=logging.DEBUG):
logdir = os.path.abspath(logdir)
if not os.path.exists(logdir):
os.mkdir(logdir)
log = logging.getLogger('stumbler')
log.setLevel(loglevel)
log_formatter = logging.Formatter("%(asctime)s - %(levelname)s :: %(message)s")
if txtlog:
txt_handler = RotatingFileHandler(os.path.join(logdir, "Stumbler.log"), backupCount=5)
txt_handler.doRollover()
txt_handler.setFormatter(log_formatter)
log.addHandler(txt_handler)
log.info("Logger initialised.")
if scrnlog:
console_handler = logging.StreamHandler()
console_handler.setFormatter(log_formatter)
log.addHandler(console_handler)
沒有什麼不尋常那裏。
#core.py
import logging
corelog = logging.getLogger('stumbler.core') # From what I understand of the docs, this should work :/
class Stumbler:
[...]
corelog.debug("Messages and rainbows...")
屏幕輸出顯示了這是如何被複制:
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir1/music.mp3
2010-01-08 22:57:07,587 - DEBUG :: SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
DEBUG:stumbler.core:SCANZIP: Checking zip contents, file: testscandir/testdir2/subdir/executable.exe
雖然文本文件是獲得正確的格式輸出,在logger.py打開屏幕註銷仍然有顯示的格式不正確輸出。
從我對文檔的理解中,調用corelog.debug(),看作爲corelog是「stumbler」記錄器的孩子,它應該使用該格式並輸出日誌。
對於這樣一個小問題的散文道歉。
TL; DR:如何從多個文件進行日誌記錄?
哇, 發現。我有logging.basicConfig()仍然在我的一些其他模塊中使用。我從未想到他們可能會造成問題。謝謝! – Loix0 2010-01-09 00:12:46