首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多流处理程序

多流处理程序
EN

Stack Overflow用户
提问于 2015-06-25 11:12:56
回答 2查看 1.4K关注 0票数 1

我正在努力加强Python脚本中的日志记录,如果能够与我分享最佳实践,我将非常感激。现在,我已经创建了这个小脚本(应该说我运行Python3.4)

代码语言:javascript
复制
import logging
import io
import sys

def Streamhandler(stream, level, format="%(asctime)s - %(name)s - %(levelname)s - %(message)s"):
    ch = logging.StreamHandler(stream)
    ch.setLevel(level)
    formatter = logging.Formatter(format)
    ch.setFormatter(formatter)
    return ch


# get the root logger
logger = logging.getLogger()

stream = io.StringIO()
logger.addHandler(Streamhandler(stream, logging.WARN))

stream_error = io.StringIO()
logger.addHandler(Streamhandler(stream_error, logging.ERROR))

logger.addHandler(Streamhandler(stream=sys.stdout, level=logging.DEBUG))

print(logger)
for h in logger.handlers:
    print(h)
    print(h.level)

# 'application' code   # goes to the root logger!
logging.debug('debug message')
logging.info('info message')
logging.warning('warn message')
logging.error('error message')
logging.critical('critical message')

print(stream.getvalue())
print(stream_error.getvalue())

我有三个处理程序,其中两个写进了一个io.StringIO (这似乎有效)。我需要这简化测试,但也通过HTTP电子邮件服务发送日志。然后有一个用于控制台的Stream处理程序。然而,在这里,logging.debug和logging.info消息在控制台上被忽略,尽管设置的级别显式地足够低?!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-25 11:26:17

首先,您没有在记录器本身上设置级别:

代码语言:javascript
复制
logger.setLevel(logging.DEBUG)

此外,您还定义了一个logger,但是对logging进行了调用--这将调用根记录器。这并不会对您的情况产生任何影响,因为您没有为您的记录器指定名称,因此logging.getLogger()返回根记录器。

wrt/“最佳实践”,这确实取决于您的脚本有多“复杂”,当然也取决于您的日志记录需求。

对于具有简单用例的自包含简单脚本(单个已知环境、不并发执行、对文件或stderr进行简单日志记录等),对logging.basicConfig()的简单调用和对logging.whatever()的直接调用通常都足够好。

对于更复杂的内容,最好使用不同的配置文件--无论是ini格式还是Python (使用logging.dictConfig),将脚本拆分为不同的模块或包,每个模块或包定义自己的名为记录器(带有logger = logging.getLogger(__name__)),并且只保留脚本本身作为代码的“运行者”,即:配置日志记录、导入模块、解析命令行args和调用主函数--最好是在try/except块中,以便在崩溃前正确地记录任何未处理的异常。

票数 2
EN

Stack Overflow用户

发布于 2015-06-25 11:26:08

logger也有一个阈值级,您需要首先将它设置为DEBUG

代码语言:javascript
复制
logger.setLevel(logging.DEBUG)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31048748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档