python中的日志记录错误
我一直在编写简单的脚本,并尝试使用logger为脚本中的每个函数生成日志 1) 基于函数名,我创建了一个日志文件处理程序,并尝试使用该处理程序放置日志。我还删除了以前存在的同名文件 3) 在函数结束时,我关闭处理程序 我的问题是: 1) 即使我关闭了处理程序,下次运行相同的函数时,我仍会收到一个错误,即我试图删除的文件(作为设置记录器文件处理程序的一部分)仍在使用中 2) 此外,记录器将我不需要的所有内容打印到控制台,我只希望它将所有内容写入文件 以下是记录器功能:python中的日志记录错误,python,logging,operating-system,Python,Logging,Operating System,我一直在编写简单的脚本,并尝试使用logger为脚本中的每个函数生成日志 1) 基于函数名,我创建了一个日志文件处理程序,并尝试使用该处理程序放置日志。我还删除了以前存在的同名文件 3) 在函数结束时,我关闭处理程序 我的问题是: 1) 即使我关闭了处理程序,下次运行相同的函数时,我仍会收到一个错误,即我试图删除的文件(作为设置记录器文件处理程序的一部分)仍在使用中 2) 此外,记录器将我不需要的所有内容打印到控制台,我只希望它将所有内容写入文件 以下是记录器功能: def setLogger(
def setLogger(path):
"""
@purpose: Intializes basic logging directory and file
"""
LOG_FILENAME = path + "\\" + "log.txt"
#logging.basicConfig(filename=LOG_FILENAME,
# format='%(levelname)s %(asctime)s %(message)s',level=logging.INFO
# )
logger = logging.getLogger()
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler(LOG_FILENAME)
file_handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(levelname)s %(asctime)s %(message)s")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
def unsetLogger(logger):
"""
@purpose: performs a basic shutdown of logger
"""
logger.handlers[0].close()
logger.removeHandler(logger.handlers[0])
logging.shutdown
我使用它们的方式是:
例如:
如果我只运行一次函数fun(),那就很好了。但如果我再次运行它,我会得到无法删除日志文件错误的消息
提前谢谢。
learningNinja在做了一些轻微的修改后,我提出了以下测试,试图重现您的错误,但我没有发现任何错误
import os
import logging
def setLogger(path):
"""
@purpose: Intializes basic logging directory and file
"""
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Simplified log file path (I just use full value passed in, and don't append "\log.txt")
file_handler = logging.FileHandler(path)
file_handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(levelname)s %(asctime)s %(message)s")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
def unsetLogger(logger):
"""
@purpose: performs a basic shutdown of logger
"""
logger.handlers[0].close()
logger.removeHandler(logger.handlers[0])
logging.shutdown
def fun():
try:
# Was getting error trying to remove a file that didn't exist on
# first execution...
os.remove("log.txt")
except:
pass
logger = setLogger("log.txt")
logging.info("hi")
unsetLogger(logger)
fun()
fun()
fun()
看看我所做的是否与您的实际代码有所不同,也许这会对您有所帮助。在做了一些轻微的修改后,我提出了以下测试,试图重现您的错误,但我没有发现任何错误
import os
import logging
def setLogger(path):
"""
@purpose: Intializes basic logging directory and file
"""
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Simplified log file path (I just use full value passed in, and don't append "\log.txt")
file_handler = logging.FileHandler(path)
file_handler.setLevel(logging.INFO)
formatter = logging.Formatter("%(levelname)s %(asctime)s %(message)s")
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
return logger
def unsetLogger(logger):
"""
@purpose: performs a basic shutdown of logger
"""
logger.handlers[0].close()
logger.removeHandler(logger.handlers[0])
logging.shutdown
def fun():
try:
# Was getting error trying to remove a file that didn't exist on
# first execution...
os.remove("log.txt")
except:
pass
logger = setLogger("log.txt")
logging.info("hi")
unsetLogger(logger)
fun()
fun()
fun()
看看我所做的是否与您的实际代码有所不同,也许这会对您有所帮助。为什么每次再次运行该方法时都要删除该文件?您真的不希望一次在日志中执行多个操作吗?为什么不附加到现有的文件(这是默认的),并使用类似TimedRotatingFileHandler的东西,这将有助于防止文件变得太大?实际上,我是按照要求做的。我无法附加其他方法可以附加的文件。为什么每次再次运行该方法时都要删除该文件?您真的不希望一次在日志中执行多个操作吗?为什么不附加到现有的文件(这是默认的),并使用类似TimedRotatingFileHandler的东西,这将有助于防止文件变得太大?实际上,我是按照要求做的。我不能附加其他人会做的文件。它甚至没有登录到你的控制台?我知道这很奇怪,即使它为我工作,我不记得我今天做了什么不同,所有这一切都开始发生了。从早上开始我就一直在尝试,无论我做什么,我都会不断地犯这些错误,不是总是,而是间歇性的。甚至我也尝试将我的删除日志文件代码放在try块中。但如果删除失败,它会追加。我将上面发布的内容的全部内容放入一个名为“testlog.py”的文件中,然后运行它,但没有看到控制台的任何输出。它创建了日志文件,在执行结束时,如预期的那样,只记录了一行。我甚至调试并逐步完成了对
fun()
的每次调用,它按照预期创建并删除了日志文件。哦,而且,我没有看到任何日志打印到控制台,因为您的代码注释表明您看到了。在上面的代码中,没有将StreamHandler
添加到记录器中,因此不应该发生这种情况。您是否在其他地方有添加StreamHandler
的代码?这可能是您的问题,因为logger.handlers[0]
可能不是FileHandler
。尝试将唯一的记录器名称添加到logging.getLogger()
调用(例如,logging.getLogger(“mylogger”)
)中,看看这是否有帮助。它至少应该删除控制台输出。它甚至没有登录到您的控制台?我知道这很奇怪,即使它为我工作,我不记得我今天做了什么不同,所有这一切都开始发生了。从早上开始我就一直在尝试,无论我做什么,我都会不断地犯这些错误,不是总是,而是间歇性的。甚至我也尝试将我的删除日志文件代码放在try块中。但如果删除失败,它会追加。我将上面发布的内容的全部内容放入一个名为“testlog.py”的文件中,然后运行它,但没有看到控制台的任何输出。它创建了日志文件,在执行结束时,如预期的那样,只记录了一行。我甚至调试并逐步完成了对fun()
的每次调用,它按照预期创建并删除了日志文件。哦,而且,我没有看到任何日志打印到控制台,因为您的代码注释表明您看到了。在上面的代码中,没有将StreamHandler
添加到记录器中,因此不应该发生这种情况。您是否在其他地方有添加StreamHandler
的代码?这可能是您的问题,因为logger.handlers[0]
可能不是FileHandler
。尝试将唯一的记录器名称添加到logging.getLogger()
调用(例如,logging.getLogger(“mylogger”)
)中,看看这是否有帮助。它至少应该删除控制台输出。