gpt4 book ai didi

python - 使用 MemoryHandler 和 FileHandler 手动设置 Python 日志记录

转载 作者:行者123 更新时间:2023-11-28 21:49:04 34 4
gpt4 key购买 nike

我找不到足够的文档来让它工作。我有非长时间运行的进程,这些进程在 stderr 上显示进度信息并使用 stdout 进行输出。我想要的是日志消息在进程退出时全部显示在最后,而且它也应该记录到一个文件中。根据我在文档中可以找到的内容,MemoryHandlerFileHandler 是我需要的。但是当我像下面这样设置时,我没有得到任何输出,无论是在文件中还是在退出时。任何帮助,将不胜感激。

import logging, logging.handlers, atexit, sys

filename = 'mylogfile.txt'
logLevel = logging.DEBUG

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
streamhandler = logging.StreamHandler(sys.stderr)
streamhandler.setLevel(logLevel)
streamhandler.setFormatter(formatter)
memoryhandler = logging.handlers.MemoryHandler(1024*100, logLevel, streamhandler)

filehandler = logging.FileHandler(filename)
filehandler.setLevel(logLevel)
filehandler.setFormatter(formatter)

logger = logging.getLogger()
logger.addHandler(memoryhandler)
logger.addHandler(filehandler)
def flush():
memoryhandler.flush()
atexit.register(flush)
logger.debug("Logger has Initialized")

最佳答案

Vinay Sajip 在这里提供了最重要的遗漏线索:记录器确实有自己的级别,我忘记设置它以便永远不会发出 DEBUG 记录。然而,还有一个问题导致 MemoryHandler 在收到一条记录后立即刷新:它自己的级别需要设置得更高才能正常工作,因为它不是我假设的较低截止级别,但处于或高于处理程序的级别会立即将其记录刷新到 target。另见 docs以供引用。下面的代码已经解决了这些问题,并以更 self 记录的方式编写,以便了解这种微妙之处。

import logging, logging.handlers, atexit, sys

filename = 'mylogfile.txt'
logLevel = logging.DEBUG

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
streamhandler = logging.StreamHandler(sys.stderr)
streamhandler.setLevel(logLevel)
streamhandler.setFormatter(formatter)
memoryhandler = logging.handlers.MemoryHandler(
capacity=1024*100,
flushLevel=logging.ERROR,
target=streamhandler
)

filehandler = logging.FileHandler(filename)
filehandler.setLevel(logLevel)
filehandler.setFormatter(formatter)
logger = logging.getLogger()
logger.setLevel(logLevel)
logger.addHandler(memoryhandler)
logger.addHandler(filehandler)
def flush():
memoryhandler.flush()
atexit.register(flush)
logging.debug("Logger has Initialized")
sys.stderr.write("I'd like this printed on the console first\n")

标准错误输出:

I'd like this printed on the console first
2015-12-07 10:42:45,707 - DEBUG - Logger has Initialized

我的日志文件.txt:

2015-12-07 10:42:45,707 - DEBUG - Logger has Initialized

关于python - 使用 MemoryHandler 和 FileHandler 手动设置 Python 日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34081632/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com