python - 记录器配置以记录到文件并打印到标准输出

标签 python file logging stdout

我正在使用 Python 的日志记录模块将一些调试字符串记录到一个运行良好的文件中。现在另外,我想使用这个模块将字符串打印到标准输出。我该怎么做呢?为了将我的字符串记录到文件中,我使用以下代码:

import logging
import logging.handlers
logger = logging.getLogger("")
logger.setLevel(logging.DEBUG)
handler = logging.handlers.RotatingFileHandler(
    LOGFILE, maxBytes=(1048576*5), backupCount=7
)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)

然后调用类似的记录器函数

logger.debug("I am written to the file")

在这里感谢您的帮助!

最佳答案

只需获取根记录器的句柄并添加 StreamHandlerStreamHandler 写入标准错误。不确定您是否真的需要标准输出而不是标准错误,但这是我在设置 Python 记录器时使用的,并且我还添加了 FileHandler。然后我所有的日志都去这两个地方(这听起来像你想要的)。

import logging
logging.getLogger().addHandler(logging.StreamHandler())

如果你想输出到stdout而不是stderr,你只需要将它指定给StreamHandler构造函数。

import sys
# ...
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))

您还可以向其中添加 Formatter,这样您的所有日志行都有一个共同的标题。

即:

import logging
logFormatter = logging.Formatter("%(asctime)s [%(threadName)-12.12s] [%(levelname)-5.5s]  %(message)s")
rootLogger = logging.getLogger()

fileHandler = logging.FileHandler("{0}/{1}.log".format(logPath, fileName))
fileHandler.setFormatter(logFormatter)
rootLogger.addHandler(fileHandler)

consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(logFormatter)
rootLogger.addHandler(consoleHandler)

打印成以下格式:

2012-12-05 16:58:26,618 [MainThread  ] [INFO ]  my message

关于python - 记录器配置以记录到文件并打印到标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13733552/

相关文章:

python - 如何修复Python中的 “TypeError: string indices must be integers”错误

android - 在 android 中获取 uri.parse() 的文件路径

testing - 运行 Rust cargo test 并让测试运行器将任何日志输出显示到控制台 stdout 或 stderr 的方法有哪些?

python - 迭代不同长度的列表

python - 如何在 Python 中使用分水岭算法分离图像

Python asyncio 任务不启动

c++ - 有人可以帮助阐明头文件的工作原理吗?

file - 如何在 Octave 中使用变量文件名将结构保存到文件中?

api - 在 ServiceStack 中我可以选择哪些选项来为每个请求分配唯一的 ID?

logging - 如何关闭 log4j2 中的 Dozer 日志条目?