【发布时间】:2011-11-18 19:54:16
【问题描述】:
我在这里查看了 python 日志记录类的教程,没有看到任何可以让我为同一输出制作不同级别的多个日志的内容。最后我想要三个日志:
<timestamp>_DEBUG.log(调试级别)<timestamp>_INFO.log(信息级别)<timestamp>_ERROR.log(错误级别)
有没有办法在一个脚本中为同一输入生成多个日志文件?
因此,在实施@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.log 和 debug.log,但只有 error.log 填充了条目。
知道为什么吗?
所以我意识到没有记录“低于”警告的内容。即使我删除了过滤器和debugLogFileHandler.setLevel(logging.DEBUG),这似乎也无关紧要。如果我将实际的日志命令设置为logger.warning 或更高,它将打印到日志中。当然,一旦我取消注释debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG)),我在Debug.log 中就没有日志活动。我很想创建自己的日志级别,但这似乎是一个非常糟糕的主意,以防万一任何人/任何其他人使用此代码。
好吧,我很愚蠢,忘记将记录器本身设置为记录 DEBUG 级别的事件。由于默认情况下日志记录类不会记录任何低于警告的内容,因此它不会记录我发送的任何调试信息。
最后感谢@Robert 过滤器。
【问题讨论】:
标签: python logging file-io sikuli