我使用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.debug("I am written to the file")
谢谢你的帮助!
添加不带参数的StreamHandler将转到stderr而不是stdout。如果其他进程对stdout转储有依赖关系(即在编写NRPE插件时),请确保显式指定stdout,否则可能会遇到一些意外的问题。
下面是一个从问题中重用假定值和日志文件的快速示例:
^{} 可以采用自Python 3.3以来的关键字参数
handlers
,这大大简化了日志设置,特别是在使用相同的格式化程序设置多个处理程序时:因此,接受的答案中相当长且冗长的示例代码就变成了这样:
(或者根据原始问题的要求使用
import sys
+StreamHandler(sys.stdout)
。)要获取记录器,请使用
稍后在脚本中,使用
logger.info()
输出有用的日志消息。只需获取根记录器的句柄并添加
StreamHandler
。StreamHandler
写入stderr。不确定您是否真的需要stdout over stderr,但这是我在设置Python记录器时使用的,我还添加了FileHandler
。然后我所有的日志都到了这两个地方(这听起来像是你想要的)。如果要输出到
stdout
,而不是stderr
,只需将其指定给StreamHandler
构造函数。您还可以向它添加一个
Formatter
,这样所有日志行都有一个公共头。即:
打印格式:
相关问题 更多 >
编程相关推荐