[英]Python logging show 3 lines for 1 log in log file
我有一個 python 項目,其中有 3 個 python 文件,其中app.py
是主文件,其他兩個文件是tracker.py
和celerio.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.py
和celerio.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.