gpt4 book ai didi

Python 日志记录重复

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:39 24 4
gpt4 key购买 nike

我有四个文件,

  • 主要.py
  • A.py
  • B.py
  • 日志系统

我正在使用 main 来使用 A.py 和 B.py 的函数,所以现在我必须在调用它们时记录所有信息。

所以我编写了一个名为 log_system 的脚本来为每个脚本文件(例如 A.py、B.py)创建日志处理程序

import logging

def fetchLogger(name="None") :
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

if (name == "None"):
#create File for Log
handler = logging.FileHandler('./engine_log/Generic.log')
handler.setLevel(logging.DEBUG)
#log format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

#adding the handler to Logging System
logger.addHandler(handler)
else:
#create File for Log
handler = logging.FileHandler('./engine_log/'+str(name))
handler.setLevel(logging.DEBUG)
#log format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
#adding the handler to Logging System
logger.addHandler(handler)
return logger

所以如果我想在脚本文件 A.py 中使用日志记录,我会写这些行:

import log_system 
"""Log System Building """
file_name = 'A.py'
logger = log_system.fetchLogger(file_name)

def hello():
try:
logger.info("excuting Hello")
except:
logger.debug("something went wrong in hello")

但是我的日志文件

2017-10-18 14:59:28,695 - log_system - INFO - A.py-excuting Hello
2017-10-18 14:59:28,695 - log_system - INFO - A.py-excuting Hello
2017-10-18 14:59:28,695 - log_system - INFO - A.py-excuting Hello
2017-10-18 14:59:28,695 - log_system - INFO - A.py-excuting Hello
2017-10-18 14:59:28,695 - log_system - INFO - A.py-excuting Hello

它多次重复日志......那我该怎么办?

解决方案

logger = logging.getLogger(name)

if logger.hasHandlers():
logger.handlers = []

logger.setLevel(logging.DEBUG)

#create File for Log
handler = logging.FileHandler('./engine_log/'+str(name))
handler.setLevel(logging.DEBUG)
#log format
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
#adding the handler to Logging System
logger.addHandler(handler)

return logger

这就是我更改 log_system 代码的方式,因此如果我已经创建了日志处理程序,我只是清空处理程序列表,这样它就不会创建重复的记录。

最佳答案

每次调用fetch_logger时,它都会向记录器添加一个新的FileHandler。每个 FileHandler 都会写入日志文件,从而导致文件中重复输出。

一种解决方案是调用记录器的 hasHandlers方法。如果记录器上配置了任何处理程序,这将返回 True,然后您可以删除它们。

def fetchLogger(name="None") :
logger = logging.getLogger(__name__)
if logger.hasHandlers():
# Logger is already configured, remove all handlers
logger.handlers = []
# Configure the logger as before.
...

关于Python 日志记录重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46807204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com