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

将Python“打印”输出重定向到Logger

贺靖
2023-03-14
问题内容

我有一个Python脚本,它利用“打印”来打印到stdout。我最近通过Python
Logger添加了日志记录,并希望通过日志记录使这些打印语句进入日志记录器(如果启用了日志记录)。我不想修改或删除这些打印语句。

我可以通过执行’log.info(“ some info msg”)’进行记录。我希望能够做这样的事情:

if logging_enabled:
  sys.stdout=log.info
print("test")

如果启用了日志记录,则应该像记录log.info(“ test”)一样记录“ test”。如果未启用日志记录,则应仅将“测试”打印到屏幕上。


问题答案:

您有两种选择:

  1. 打开一个日志文件,并用它而不是函数替换sys.stdout:

    log = open("myprog.log", "a")
    

    sys.stdout = log

    print(“Hello”)

  2. 用您的日志功能替换打印:

    # If you're using python 2.x, uncomment the next line
    

    from future import print_function

    print = log.info

    print(“Hello!”)

    nothing is printed because log.info is called instead of print



 类似资料:
  • 问题内容: 我想使用python将打印重定向到.txt文件。我有一个“ for”循环,当我要将所有这些输出重定向到一个文件时,它将“打印”每个文件的输出。所以我试着把 在我的脚本的开头。但是,.txt文件中什么也没有。我的脚本是: 所以有什么问题?除了此sys.stdout以外,还有其他方法吗? 我需要我的结果看起来像: 问题答案: 最明显的方法是打印到文件对象: 但是,重定向标准输出对我也有效。

  • 问题内容: 有没有一种方法可以将所有打印输出保存到python中的txt文件中?可以说我的代码中有这两行,我想将打印输出保存到名为的文件中。 我希望文件包含 问题答案: 给一个关键字参数,其中参数的值是文件流。我们可以使用以下功能创建文件流: 从Python文档中有关: 所述参数必须是与对象方法; 如果不存在或,将使用。 和文档: 打开并返回相应的文件对象。如果无法打开文件,则引发。 在作为第二个

  • 这可能吗?我知道我可以以类似的方式将stdout定向到文件(请参见:将打印重定向到日志文件)

  • 问题内容: 我想从Groovy程序中执行foo.bat,并将生成的进程的输出重定向到stdout。Java或Groovy代码示例都可以。 foo.bat可能需要花费几分钟才能运行并生成大量输出,因此我希望在生成后立即查看输出,而不是必须等到该过程完成之后才能立即查看所有输出。 问题答案: 它使用一个类读取执行的程序生成的所有输出,并将其显示在其自己的stdout中。

  • 问题内容: 我正在AIX 6上工作,在KIX Shell上运行Java命令,并且正在尝试调试类加载问题。我放了-verbose:class来打印加载的类,然后>> / home / user / log.log将控制台放到一个文件中。已创建log.log文件,但其大小为零。文件不包含任何信息,所有详细信息都在一闪而过。 问题答案: 也尝试重定向: 您的Java代码可能正在编写您的命令未重定向的信息

  • 我想让我的程序记录给定对象的XML使用: 目前,我使用stdout作为输出流。但是stdout没有打印在log4j日志文件中。 如何将此方法的输出重定向到log4j日志文件? 谢啦