python logger日志级别_使用Python logger类为不同的日志级别生成多个日志

这篇博客探讨了如何使用Python的logging模块为不同的日志级别(调试、信息和错误)生成独立的日志文件。作者遇到的问题是无法同时在多个日志文件中记录不同级别的信息。通过创建过滤器和处理器,最终成功实现了分离的日志记录,但遇到了调试日志未被记录的问题。经过调整,发现默认配置只记录警告及以上级别的日志,修改后实现了调试级别的记录。
摘要由CSDN通过智能技术生成

我在这里浏览了python日志类的教程,没有看到任何东西可以让我为同一输出生成不同级别的多个日志。最后,我想要三个日志:

_DEBUG.log(调试级别)

_INFO.log(信息级别)

_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中就没有日志活动。一、 我很想做我自己的日志级别,但这似乎是一个非常糟糕的主意,以防任何人/任何其他人使用此代码。

<——————————————————————————————————————————————————————————————————

好吧,我很蠢,忘了设置记录器本身来记录调试级别的事件。由于默认情况下logging类不会记录低于警告的任何内容,因此它不会记录我发送给它的任何调试信息。

最后感谢并向“罗伯特”大声叫喊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值