python - Python记录重复输出
问题描述
几天以来我一直在研究 python 日志记录,今天我正在工作中对其进行测试。我正在测试以下代码:
import inspect
import logging
def customLogger(FileHandlerlogLevel, ConsoleHandlerLogLevel, file_path_and_name):
'''
- logLevel input values: DEBUG, INFO, WARNING, ERROR, CRITICAL
'''
# Gets the name of the class / method from where this method is called
loggerName = inspect.stack()[1][3]
logger = logging.getLogger(loggerName)
logger.setLevel(logging.DEBUG)
fileHandler = logging.FileHandler(file_path_and_name, mode="w")
fileHandler.setLevel(FileHandlerlogLevel)
formatter = logging.Formatter('%(name)s - %(lineno)d - %(asctime)s - %(levelname)s - %(message)s',
datefmt="%m/%d/%Y %I:%M:%S %p")
fileHandler.setFormatter(formatter)
logger.addHandler(fileHandler)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(ConsoleHandlerLogLevel)
stream_handler.setFormatter(formatter)
logger.addHandler(stream_handler)
return logger
test_logger = customLogger(logging.DEBUG, logging.DEBUG, "test_loggerv01.log")
test_logger.info("test 01")
所以基本上我有两个给定记录器的处理程序。当我第一次运行脚本时,控制台(Spyder)显示如下:
In [1]: runfile('C:/Users/aardem/Python_AA/AB/Corproates_Prj/custom_logger_andrea_v02.py', wdir='C:/Users/aardem/Python_AA/AB/Corproates_Prj')
<module> - 36 - 07/19/2018 06:32:22 PM - INFO - test 01
到目前为止,一切都很好。然后,我将信息消息更改为“test 02”(我的代码的最后一行),保存并重新运行脚本。现在,控制台显示以下内容:
In [2]: runfile('C:/Users/aardem/Python_AA/AB/Corproates_Prj/custom_logger_andrea_v02.py', wdir='C:/Users/aardem/Python_AA/AB/Corproates_Prj')
<module> - 36 - 07/19/2018 06:32:34 PM - INFO - test 02
<module> - 36 - 07/19/2018 06:32:34 PM - INFO - test 02
同样,如果我将脚本的最后一行更改为:
test_logger.info("test 03")
然后保存并重新运行脚本,这是新的控制台输出:
In [3]: runfile('C:/Users/aardem/Python_AA/AB/Corproates_Prj/custom_logger_andrea_v02.py', wdir='C:/Users/aardem/Python_AA/AB/Corproates_Prj')
<module> - 37 - 07/19/2018 06:38:20 PM - INFO - test 03
<module> - 37 - 07/19/2018 06:38:20 PM - INFO - test 03
<module> - 37 - 07/19/2018 06:38:20 PM - INFO - test 03
有人可以帮我解决这个意想不到的问题吗?保存在文件“test_loggerv01.log”中的数据也会出现同样的问题。谢谢
解决方案
每次runfile
在同一个 IPython 会话中运行该文件时,都会向同一个记录器添加越来越多的处理程序。旧的处理程序不会消失。
所有这些重复的处理程序将处理该记录器的日志记录,从而导致重复的日志处理。
推荐阅读
- sql - 在 Node.JS 中使用 SQL 在概念上是错误的吗?
- sql - 数据集转置
- python - 如何在 Tensorflow 中对 RaggedTensor 进行切片
- ruby-on-rails - 如何在 Rails 中根据连接表范围检索关联
- reactjs - 从表中删除值
- pdf - 可以在 jupyter notebook markdown 中指定作者,以便 nbconvert 将其用于 PDF 文章作者吗?
- inno-setup - InnoSetup:文件检查功能有问题
- opengl - 如何将 OpenGL 渲染场景从云端传输到远程客户端
- python - VSCode Python 调试器在未执行的行上执行 - 并在正在执行的行上执行
- ios - SwiftUI - 限制视图内矩形的拖动