Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的日志记录错误_Python_Logging_Operating System - Fatal编程技术网

python中的日志记录错误

python中的日志记录错误,python,logging,operating-system,Python,Logging,Operating System,我一直在编写简单的脚本,并尝试使用logger为脚本中的每个函数生成日志 1) 基于函数名,我创建了一个日志文件处理程序,并尝试使用该处理程序放置日志。我还删除了以前存在的同名文件 3) 在函数结束时,我关闭处理程序 我的问题是: 1) 即使我关闭了处理程序,下次运行相同的函数时,我仍会收到一个错误,即我试图删除的文件(作为设置记录器文件处理程序的一部分)仍在使用中 2) 此外,记录器将我不需要的所有内容打印到控制台,我只希望它将所有内容写入文件 以下是记录器功能: def setLogger(

我一直在编写简单的脚本,并尝试使用logger为脚本中的每个函数生成日志

1) 基于函数名,我创建了一个日志文件处理程序,并尝试使用该处理程序放置日志。我还删除了以前存在的同名文件

3) 在函数结束时,我关闭处理程序

我的问题是:

1) 即使我关闭了处理程序,下次运行相同的函数时,我仍会收到一个错误,即我试图删除的文件(作为设置记录器文件处理程序的一部分)仍在使用中

2) 此外,记录器将我不需要的所有内容打印到控制台,我只希望它将所有内容写入文件

以下是记录器功能:

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”)
)中,看看这是否有帮助。它至少应该删除控制台输出。