Python 记录器 : won't overwrite the original log?

标签 python logging

因此,当我将以下 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')

所以我运行一次: MinmalLoggingf()

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

MinmalLoggingf()

最佳答案

如果我没理解错的话,您一次要运行某个 Python 进程好几天,并且想每天轮换日志。我建议你走不同的路线,使用自动旋转日志文件的处理程序,例如http://www.blog.pythonlibrary.org/2014/02/11/python-how-to-create-rotating-logs/

但是,如果您想以您熟悉的相同方法使用该过程控制日志(Python 控制台,粘贴代码......非常不漂亮且容易出错,但有时 quick-n-dirty 就足够了手头的任务),嗯...

您的问题是每次粘贴代码时都会创建一个新的 FileHandler,并将其添加到 Logger 对象。您最终得到一个附加了 X FileHandlers 的记录器,它们都写入同一个文件。试试这个:

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')

根据您的要求,我还添加了一个使用 TimedRotatingFileHandler 的示例。请注意,我尚未在本地对其进行测试,因此如果您遇到问题,请返回。

import logging
from logging.handlers import TimedRotatingFileHandler

logPath = os.path.join('', "fileLoaderLog")
logger = logging.getLogger('oneDayFileLoader')
logHandler = TimedRotatingFileHandler(logPath,
                                   when="midnight",
                                   interval=1)
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
logHandler.setFormatter(formatter)
logger.addHandler(logHandler) 
logger.setLevel(logging.DEBUG)
logger.error('overwrite')

关于Python 记录器 : won't overwrite the original log?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37925579/

相关文章:

python - 有没有办法在 venv/web 服务器中安装 Tesseract OCR?

python - 大量按钮和智能检查被检查

python - 尝试渲染条形码图像,但对象不可调用?

java - 如何在 Eclipse 中的项目类路径中添加 log4j.properties 文件的路径?

java - 如何以编程方式限制 Eclipse (Message)Console 的缓冲区大小?

java - kafka-log4j-appender 0.9 不工作

小数据集上的 Python networkx 内存错误

python - 如何使用 python 和 opencv 在图像上绘制两个轮廓,给定它们之间的轮廓距离为 100 像素

java - 不同级别的logback不同文件

eclipse - grizzly 记录到 stderr,在 eclipse 中很烦人