[英]How to log from multiple modules python logging
我正在使用RotatingFilehandler保留5個文件作為備份。 但是它不會記錄除主模塊以外的所有模塊的消息。
basicconfig工作正常,但僅創建一個文件。
log_check.py:
import ll
import logChk
import logging
from logging.handlers import RotatingFileHandler
LOG_FILENAME = 'check.log'
logger = logging.getLogger(__name__)
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ %(name)s.%(funcName)s:%(lineno)d] - %(message)s")
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger = logging.getLogger(__name__)
def foo():
logger.warning("logging from d on call foo()")
if __name__ == "__main__":
logger.info('Starting logger for...')
logger.warning('logging from c')
foo()
logChk.doo()
ll.fun()
ll.py:
import logging
import log_conf
logger=logging.getLogger(__name__)
def fun():
logger.info("In Fun")
logChk.py:
import logging
logger = logging.getLogger(__name__)
def doo():
logger.info('Starting logger for... in dooo')
記錄器按名稱分層組織。 記錄日志消息后,它將遍歷記錄器以查找處理程序,從記錄消息的記錄器開始,向上移動層次結構。 層次結構遵循名稱,因此,由於您是按模塊名稱命名記錄器,因此記錄到模塊“ xyz”的消息將首先嘗試查找附加到“ xyz”,然后是“ xy”,“ x”和最后是根的處理程序。記錄器“”。
因此,要記錄所有消息(通常需要這樣做),您需要向根記錄器而不是模塊記錄器添加處理程序。
LOG_FILENAME = 'check.log'
rootlogger = logging.getLogger() # No name here will return you the root logger
formatter =logging.Formatter("[%(asctime)s] %(levelname)s [ % (name)s.%(funcName)s:%(lineno)d] - %(message)s")
rootlogger.setLevel(logging.DEBUG)
handler = RotatingFileHandler(LOG_FILENAME, maxBytes=2000, backupCount=5)
handler.setFormatter(formatter)
rootlogger.addHandler(handler)
要管理日志記錄配置,建議您不要手動設置處理程序和格式化程序,而應使用logging.config模塊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.