簡體   English   中英

如何從多個模塊進行日志記錄python日志記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM