【发布时间】:2018-08-09 19:24:03
【问题描述】:
我刚开始学习 Python,遇到了一个我无法解决的问题。 我想将 CRITICAL 以上的每个级别重定向到 sys.stderr,将 WARNING 以上的所有内容重定向到 sys.stdout。 我想出了这个脚本...
import logging
import sys
print("imported module {}".format(__name__))
class PyLogger(logging.Logger):
"""Wrapper for logging.Logger to redirect its message to
sys.stdout or sys.stderr accordingly """
def __init__(self, *args):
super(PyLogger, self).__init__(self, *args)
# get Logger
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
# build Formatter
formatter = logging.Formatter(fmt="%(asctime)s:%(name)s %(message)s")
# build StreamHandler for sys.stderr
error = logging.StreamHandler(stream=sys.stderr)
error.setLevel(logging.CRITICAL)
error.setFormatter(formatter)
logger.addHandler(error)
# build StreamHandler for sys.stdin
out = logging.StreamHandler(stream=sys.stdout)
out.setFormatter(formatter)
out.setLevel(logging.WARNING)
logger.addHandler(out)
def main():
logger = PyLogger()
# help(logger)
logger.info("INFO")
if __name__ == "__main__":
main()
直接运行此脚本时,出现以下错误:
No handlers could be found for logger "<__main__.PyLogger object at 0x105f23c50>"
我用谷歌搜索了很多人说 logging.basicConfig() 可以完成这项工作,但这对我没有用。
也许你们中的某个人可以帮助我。 谢谢!
【问题讨论】:
-
无关:这是我第一次在 SO 上看到“运行代码 sn-p”和“复制 sn-p 以回答”按钮。它完全破坏了我复制代码块以在 Python 环境中本地运行它的能力。我无法突出显示滚动,它仅滚动页面而不是代码框(这是在最新版本的 Chrome 上,也在 Firefox 上尝试过,禁用任何可能与它混淆的扩展)。
-
您可以尝试在代码开头单击一下,然后在结尾处 shift 单击,这将突出显示所有内容。
标签: python redirect logging stdout stderr