簡體   English   中英

Python 日志記錄顯示 3 行 1 登錄日志文件

[英]Python logging show 3 lines for 1 log in log file

我有一個 python 項目,其中有 3 個 python 文件,其中app.py是主文件,其他兩個文件是tracker.pycelerio.py 我為所有文件啟用了日志記錄,下面是它的代碼:

def setup_logger(logger_name, log_file, level=logging.ERROR):
    log_formatter = logging.Formatter('%(asctime)s %(message)s')
    my_handler = RotatingFileHandler(log_file, mode='a', maxBytes=100 * 1024 * 1024, backupCount=5, encoding=None,
                                     delay=0)
    my_handler.setFormatter(log_formatter)
    my_handler.setLevel(level)
    l = logging.getLogger(logger_name)
    l.addHandler(my_handler)

dir = Path(__file__).parents[1]
log_file = os.path.join(dir, 'logs', 'application.log')
setup_logger('debug', log_file)
log = logging.getLogger('debug') 

然后我在 python 文件中使用它,就像log.error("Hello world")一樣,它工作正常。 現在,由於我還有另外 2 個文件,我還在這兩個文件tracker.pycelerio.py中復制了相同的上述代碼。 但問題是,如果我在 app.py 中記錄log.error("Hello world from app.py") app.py application.log文件中保存為 3 次。 其他文件也是如此。

2019-11-15 13:32:00,288 Hello world from app.py
2019-11-15 13:32:00,288 Hello world from app.py
2019-11-15 13:32:00,288 Hello world from app.py

我不知道為什么它只記錄了 1 個日志 3 次。 任何人都可以在這方面幫助我。 謝謝

在設置記錄器時,您會一遍又一遍地添加新的處理程序。 在添加之前嘗試清除它們:

l.handlers[:] = []

日志系統有全局state。 通過將此代碼添加到所有三個模塊中,您將三個處理程序添加到名為“debug”的記錄器中。

僅在app.py中設置一次日志記錄,僅在其他模塊中使用log = logging.getLogger('debug')

應用程序.py

def setup_logger(logger_name, log_file, level=logging.ERROR):
    log_formatter = logging.Formatter('%(asctime)s %(message)s')
    my_handler = RotatingFileHandler(log_file, mode='a', maxBytes=100 * 1024 * 1024, backupCount=5, encoding=None,
                                     delay=0)
    my_handler.setFormatter(log_formatter)
    my_handler.setLevel(level)
    l = logging.getLogger(logger_name)
    l.addHandler(my_handler)

dir = Path(__file__).parents[1]
log_file = os.path.join(dir, 'logs', 'application.log')
setup_logger('debug', log_file)
log = logging.getLogger('debug') 

tracker.py 和 celerio.py

import logging
log = logging.getLogger('debug') 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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