我进行了很多次搜索,发现了一些类似的问题,但没有一个答案对我的处境有所帮助。我用python字典设置了日志,例如
LOG_DICT = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'fileHandler': {
'class': 'logging.FileHandler',
'level': 'DEBUG',
'formatter': 'standard',
'mode': 'w',
'filename': 'C:\\Users\\Sam\\Documents\\Shoe Stuff\\MonitorV2\\logs\\Monitor.log'
}
},
'loggers': {
'': { # root logger
'level': 'DEBUG',
'handlers': ['fileHandler'],
'propagate': True
}
}
}
我的主程序中有以下代码
logging.config.dictConfig(LOG_DICT)
logger = logging.getLogger('')
以及该词典的导入,因为它存储在其自己的模块中。在我的其他模块中,我只是在我的基类中这样做
self.logger = logging.getLogger(__name__)
并使用self.logger.info()
或self.logger.debug()
等
我的问题(我想这确实是有道理的)是,每次使用logging.getLogger(__name__)
实例化一个新的记录器实例时,我都会覆盖日志文件,这是因为我已经在{{ 1}}至fileHandler
。我希望在每次运行程序开始时删除日志文件,而不是每次都将其附加。有什么办法可以使我将每个模块记录到相同的日志文件中,而在程序运行期间不会被覆盖?
我是否必须创建一个新的文件处理程序,并将其模式设置为在日志字典配置中为每个模块添加并添加单独的记录器?有没有更简单的方法?