3
我想在我的Python庫模塊中設置通用日誌記錄,以便它們使用調用模塊中配置的日誌記錄器而不必硬編碼記錄器名稱。我在調用模塊中看到了很多使用logging.basicConfig()
的示例,並在庫模塊中調用logging.debug()
,但在配置我自己的StreamHandler時不起作用。我究竟做錯了什麼?從庫模塊的Python日誌記錄
這是我的電話模塊:
import logging, logging.handlers
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
consolehandler = logging.StreamHandler()
consoleformatter = logging.Formatter('[%(name)s] %(levelname)s %(message)s')
consolehandler.setFormatter(consoleformatter)
logger.addHandler(consolehandler)
import libmodule
def run():
logger.info("message from calling module")
libmodule.say("message from library module")
我在libmodule.py試過這樣:
import logging
def say(msg):
logging.info(msg)
這:
import logging
logger = logging.getLogger()
def say(msg):
logger.info(msg)
但在這兩種情況下,當我調用運行(),我得到這個輸出:
[callingmodule] INFO message from calling module
但期待這樣的:
[callingmodule] INFO message from calling module
[callingmodule] INFO message from library module
感謝您回覆Corley。這將意味着硬編碼我的庫代碼中的通用名稱,並且只會在庫的用戶選擇相同的通用名稱時才起作用。 – 2014-10-16 15:12:15
好吧,你現在正在這樣做,有點(都在查看中央日誌記錄模塊並尋找硬代碼記錄器,一個是'__file__',另一個是根目錄;兩者都不直視對方)。你是否試圖允許用戶將圖書館記錄器重新路由到他們自己的?做這件事的標準方法是,有一個'initLogger()'函數來初始化庫記錄器,你可以傳入一個記錄器。如果沒有記錄器通過,它創建它自己的。類似的東西。 – 2014-10-16 15:34:25
你說得對,我想把圖書館記錄器重新路由到用戶配置的記錄器中,但我希望能自動完成。 'initLogger()'方法聽起來很有趣。有沒有可以指點我的例子? – 2014-10-16 15:46:39