python 2.7:删除处理程序对象或记录器
我想删除此记录器。python 2.7:删除处理程序对象或记录器
backup.py
try:
Logger = Log('PythonWork.backup')
Logger.info("backup task started")
Logger.disabled=True
except Exception as e:
errlogger = Error('PythonWork.backup')
errlogger.error("Error: Error found back up service,failed.")
Logger.error("backup task started")
我试图
Logger.removeHandler()
和Logger.propagate
我的日志功能
def Log(LOG_NAME):
logger = logging.getLogger(LOG_NAME)
logger.setLevel(logging.DEBUG)
filename=python.log
fh = logging.FileHandler(filename)
fh.setLevel(logging.INFO)
logger.addHandler(fh)
return logger
我的错误功能
def Error(LOG_NAME):
logger = logging.getLogger(LOG_NAME)
logger.setLevel(logging.DEBUG)
fileNameError=python.log
fhError = logging.FileHandler(fileNameError)
fhError.setLevel(logging.ERROR)
logger.addHandler(fhError)
return logger
在backup.py文件我不想excecute Logger对象,但它被执行。当我运行这个程序时,我想停止或禁用或删除该对象。
从你的代码,它似乎Log()
功能在每次调用创建一个新的日志处理程序 - 看到最后一行:
fh = logging.FileHandler(filename)
fh.setLevel(logging.INFO)
logger.addHandler(fh)
^^^^^^^^^^^^^^^^^^^^^
所以,你可能有FileHandler
对象万千,消除1韩元不要删除其他人。我怀疑这是你的问题。
如果要删除相关的日志中记录的所有处理程序,你可以做到以下几点:
for handler in logger.handlers[:]:
logger.removeHandler(handler)
希望这有助于。
这在Python中是一个糟糕的解决方案,因为您在迭代它时突变了列表logger.handlers。最好遍历列表的副本(例如'logger.handlers [:]')。它可能只是简单地将logger.handlers设置为空列表[[]'),但是日志包在释放前会在每个处理程序上获取锁,因此这不是安全的。 – johnthacker
@johnthacker我根据你的评论编辑了答案 – mguijarr
对不起,错误函数行6中有一个错误fhError.setLevel(logging.INFO)。这是fhError.setLevel(logging.ERROR) –