当前位置: 首页 > 面试题库 >

记录,StreamHandler和标准流

巩才捷
2023-03-14
问题内容

我不知道如何将信息级别的消息记录到stdout,但将其他所有内容记录到stderr。我已经阅读了http://docs.python.org/library/logging.html。有什么建议吗?


问题答案:

以下脚本log1.py

import logging, sys

class SingleLevelFilter(logging.Filter):
    def __init__(self, passlevel, reject):
        self.passlevel = passlevel
        self.reject = reject

    def filter(self, record):
        if self.reject:
            return (record.levelno != self.passlevel)
        else:
            return (record.levelno == self.passlevel)

h1 = logging.StreamHandler(sys.stdout)
f1 = SingleLevelFilter(logging.INFO, False)
h1.addFilter(f1)
rootLogger = logging.getLogger()
rootLogger.addHandler(h1)
h2 = logging.StreamHandler(sys.stderr)
f2 = SingleLevelFilter(logging.INFO, True)
h2.addFilter(f2)
rootLogger.addHandler(h2)
logger = logging.getLogger("my.logger")
logger.setLevel(logging.DEBUG)
logger.debug("A DEBUG message")
logger.info("An INFO message")
logger.warning("A WARNING message")
logger.error("An ERROR message")
logger.critical("A CRITICAL message")

运行时,产生以下结果。

C:\ temp> log1.py
调试消息
INFO消息
警告消息
错误消息
关键信息

正如你所期望的,因为在终端上sys.stdout,并sys.stderr是相同的。现在,让我们将标准输出重定向到文件tmp

C:\ temp> log1.py> tmp
调试消息
警告消息
错误消息
关键信息

因此,INFO消息没有被打印到终端-但指示消息sys.stderr 被打印。让我们看一下其中的内容tmp

C:\ temp>输入tmp
INFO消息

So that approach appears to do what you want.



 类似资料:
  • 问题内容: 构造之后,使用标准的Java日志记录API(导入java.util.logging.Logger): 我已经可以登录了。由于它没有FileHandler,因此不会向磁盘写入任何内容。 它写入(不是全部)日志消息以输出。如何禁用此功能?在此先感谢Agostino 问题答案: 如果您不知道Java util日志记录的默认配置,就会出现问题。体系结构事实:0)每个记录器(无论其名称是什么)都

  • 附录 C 描述了 Erlang 标准库模块的一些函数。 io Io 模块提供了基本的输入输出。这儿的所有函数都有可选参数 Dev ,它是一个用于输入输出的文件描述符。默认值是标准输入输出。 format([Dev],F,Args) 按格式 F 输出参数 Args 。 get_chars([Dev],P,N) 输出提示 P 并读出 Dev 的前 N 个字符。 get_line([Dev], P) 输

  • 我对标准差的计算有点执着,如果你能在下面的两个问题上给我一些帮助,那就太好了。 代码 问题1:我如何计算这个的标准误差(平均值的标准偏差)? 代码 问题2:如何计算累积标准偏差? 非常感谢!!(很抱歉数据格式错误!)

  • 我正在构建一个包含许多类的Javafx应用程序。我想使用所有类的java日志记录。但所有选项似乎都伴随着过多或重复的代码。以下是我能想到的: > 声明Logger为每个类中的私有静态最终字段,即: 私有静态最终记录器LOGGER=Logger.get记录器(MyClass.class.getName()); 这个选项似乎有点烦人,每次上课都要这么做。 又一次似乎不优雅 你们怎么处理这种情况?这只是

  • 问题内容: 如何禁用Python中的标准错误流日志记录?这不起作用: 问题答案: 我找到了一个解决方案: 这将防止日志记录发送到包括控制台日志记录的上层记录器。

  • 问题内容: 我有一个奇怪的问题,如果可以解决,那就太好了。出于调试目的(以及其他一些目的),我在标准输出上编写了控制台Java应用程序的日志。在标准输出上写一些内容,在标准错误上打印一些错误,例如错误。问题是这两个没有完全同步,因此打印线的顺序并不总是正确的。我猜这是因为打印了很多东西,并且碰巧一个输出的缓冲区已满,所以其他输出在第一个输出刷新其缓冲区之前就已打印出来。 例如,我想这样写: 有时打