gpt4 book ai didi

python - 使用 Python 记录器类为不同的日志级别生成多个日志

转载 作者:太空狗 更新时间:2023-10-30 00:37:11 26 4
gpt4 key购买 nike

我在这里查看了 python 日志记录类的教程,但没有看到任何可以让我为相同输出创建不同级别的多个日志的内容。最后我想要三个日志: <timestamp>_DEBUG.log (调试级别)
<timestamp>_INFO.log (信息级别)
<timestamp>_ERROR.log (错误级别)

有没有办法在一个脚本中为同一输入生成多个日志文件?

<------------更新 #1---------------------------->
因此,在实现@robert 的建议时,我现在遇到了一个小问题,可能是由于没有完全理解他的代码中正在做什么。

这是我在 scriptRun.py 中的代码

import os
import logging

logger = logging.getLogger("exceptionsLogger")
debugLogFileHandler = logging.FileHandler("Debug.log")
errorLogFileHandler = logging.FileHandler("Error.Log")
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
errorLogFileHandler.setFormatter(formatter)
debugLogFileHandler.setFormatter(formatter)
logger.addHandler(debugLogFileHandler)
logger.addHandler(errorLogFileHandler)

class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level
def filter(self, record):
return record.levelno == self.level
debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
errorLogFileHandler.addFilter(LevelFilter(logging.ERROR))

directory = []
for dirpath, dirnames, filenames in os.walk("path\to\scripts"):
for filename in [f for f in filenames if f.endswith(".py")]:
directory.append(os.path.join(dirpath, filename))
for entry in directory:
execfile(entry)
for lists in x:
if lists[0] == 2:
logger.error(lists[1]+" "+lists[2])
elif lists[0] == 1:
logger.debug(lists[1]+" "+lists[2])

这个正在运行的例子是:

import sys

def script2Test2():
print y
def script2Ttest3():
mundo="hungry"

global x
x = []

theTests = (test2, test3)

for test in theTests:
try:
test()
x.append([1,test.__name__," OK"])
except:
error = str(sys.exc_info()[1])
x.append([2,test.__name__,error])

现在回到我的问题:运行 scriptRun.py当我运行它时不会抛出任何错误,并且 error.logdebug.log已创建,但只有 error.log填充了条目。

知道为什么吗?

<------------------------更新 #2-------------------- ---->

所以我意识到没有任何比警告“低”的记录。即使我删除了过滤器和 debugLogFileHandler.setLevel(logging.DEBUG)这似乎并不重要。如果我将实际的日志命令设置为 logger.warning或更高,它将打印到日志。当然,一旦我取消注释 debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))我在 Debug.log 中没有日志事件.我很想创建自己的日志级别,但这似乎是一个非常糟糕的主意,以防任何人/任何其他人使用此代码。

<------------------------最终更新-------------------- -->
好吧,我很愚蠢,忘记设置记录器本身来记录 DEBUG 级别的事件。由于默认情况下,日志记录类不会记录任何低于警告的内容,因此它不会记录我发送给它的任何调试信息。

最后感谢并感谢@Robert 提供的过滤器。

最佳答案

创建多个处理程序,每个处理程序对应一个输出文件(INFO.log、DEBUG.log 等)。

为每个只允许特定级别的处理程序添加一个过滤器。

例如:

import logging

# Set up loggers and handlers.
# ...

class LevelFilter(logging.Filter):
def __init__(self, level):
self.level = level

def filter(self, record):
return record.levelno == self.level

debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
infoLogFileHandler.addFilter(LevelFilter(logging.INFO))

关于python - 使用 Python 记录器类为不同的日志级别生成多个日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7447382/

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