我正在使用Python的日志记录模块将一些调试字符串记录到一个非常好的文件中 . 现在另外,我想使用这个模块也将字符串打印到stdout . 我该怎么做呢?为了将我的字符串记录到文件,我使用以下代码:
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 函数
logger.debug("I am written to the file")
谢谢你的帮助!
6 回答
对于2.7,请尝试以下操作:
只需获取根 Logger 的句柄并添加StreamHandler . StreamHandler写入stderr . 不确定你是否真的需要stdout而不是stderr,但这是我在设置Python Logger 时使用的,我也添加了FileHandler . 然后我的所有日志都会转到这两个地方(这听起来像你想要的) .
您还可以向其添加Formatter,以便所有日志行都有一个公共 Headers .
即:
打印到以下格式:
logging.basicConfig()可以从Python 3.3开始使用关键字参数
handlers
,这简化了日志记录设置,特别是在使用相同的格式化程序设置多个处理程序时:因此,接受的答案中相当长且冗长的示例代码就变成了这样:
(或根据原始问题的要求使用
import sys
StreamHandler(sys.stdout)
. )要获取 Logger ,请使用
稍后在脚本中,使用
logger.info()
输出有用的日志消息 .添加不带参数的StreamHandler会转到stderr而不是stdout . 如果某个其他进程依赖于stdout转储(即编写NRPE插件时),那么请确保明确指定stdout,否则可能会遇到一些意外问题 .
这是一个重用假设值和问题LOGFILE的快速示例:
在设置任何其他处理程序或记录任何消息之前,使用
basicConfig
作为参数运行basicConfig
,或手动添加StreamHandler
将消息发送到stdout到根 Logger (或任何其他所需的 Logger ) .在多个Python包中反复使用Waterboy的代码之后,我最终将它转换为一个小的独立Python包,你可以在这里找到它:
https://github.com/acschaefer/duallog
代码记录良好且易于使用 . 只需下载
.py
文件并将其包含在项目中,或通过pip install duallog
安装整个软件包 .