Python logger:不会覆盖原始日志吗?

2024-10-01 09:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

所以,当我将下面的x次复制粘贴到python提示符时, 它将日志x次添加到指定文件的末尾。在

如何更改代码,以便每次复制粘贴到提示时, 我只是重写现有的文件(代码似乎不接受 mode = 'w'选项或我似乎不理解它的含义)

def MinimalLogginf():
    import logging
    import os
    paths = {'work': ''}
    logger = logging.getLogger('oneDayFileLoader')
    LogHandler = logging.FileHandler(os.path.join(paths["work"] , "oneDayFileLoader.log"), mode='w')
    formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    LogHandler.setFormatter(formatter)
    logger.addHandler(LogHandler) 
    logger.setLevel(logging.DEBUG)
    #Let's say this is an error:
    if(1 == 1):
        logger.error('overwrite')

所以我运行了一次: 最小对数()

现在,我希望新的日志文件覆盖上一次运行时创建的日志文件:

^{pr2}$

Tags: 文件代码importosmodeformatterloggingerror
3条回答

如果我理解正确的话,您一次运行一个特定的Python进程好几天,并且希望每天都循环日志。我建议您使用另一种方法,使用自动旋转日志文件的处理程序,例如http://www.blog.pythonlibrary.org/2014/02/11/python-how-to-create-rotating-logs/

但是,如果你想用你习惯的方法(Python控制台,粘贴代码)来控制日志。。非常不堪入目且容易出错,但有时quick-n-dirty对于手头的任务来说就足够了),嗯。。。在

每次在你创建一个新的FileLogger对象时,你都要添加一个新的FileLogger对象。最后,您将得到一个附加了X个文件处理程序的记录器,所有这些文件都写入同一个文件。试试这个:

import logging
paths = {'work': ''}
logger = logging.getLogger('oneDayFileLoader')
if logger.handlers:
   logger.handlers[0].close()
   logger.handlers = []
logHandler = logging.FileHandler(os.path.join(paths["work"] , "oneDayFileLoader.log"), mode='w')
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
logHandler.setFormatter(formatter)
logger.addHandler(logHandler) 
logger.setLevel(logging.DEBUG)
logger.error('overwrite')

根据您的请求,我还添加了一个使用TimeDrotingFileHandler的示例。注意,我还没有在本地测试过,所以如果您有问题,请ping回来。在

^{pr2}$

模式被指定为日志记录.basicConfig并使用filemode传递。在

logging.basicConfig(
    level = logging.DEBUG,
    format = '%(asctime)s %(levelname)s %(message)s',
    filename = 'oneDayFileLoader.log,
    filemode = 'w'
)

https://docs.python.org/3/library/logging.html#simple-examples

由于多次调用addHandler,日志消息被复制。对addHandler的每次调用都会添加一个附加的日志处理程序。在

如果要确保文件是从头创建的,请添加一行额外的代码将其删除:

os.remove(os.path.join(paths["work"], "oneDayFileLoader.log"))

相关问题 更多 >