首页 > 解决方案 > 有没有办法让编写 Python 记录器更像编写打印语句?

问题描述

我最近在使用 python,并且我一直在编写的代码开始变得足够大,以至于我开始打开和关闭打印语句,所以我环顾四周看看 SO 推荐的内容,并且每次社区投票时都会这样做应该使用日志而不是打印,但是关于如何将其配置为易于使用的讨论和文档令人困惑且难以理解

但是,我发现编写语句的记录器版本更耗时,更难人类解析,而且看起来很粗糙:

print (‘First value is:‘, val1, ‘Second value is‘, val2)

对比

logger.info(‘value 1 is: %s , value 2 is: %s’, val1, val2)

除了使用以下方式滚动我自己的调试级别之外:

DEBUGGING = True

def debug (msg):
   if DEBUGGING:
      print (msg)

我可以做些什么来使日志语句更易于读取写入?还是我应该尝试的另一个包?

标签: python-3.xdebugging

解决方案


两种选择。

1)stdlib采伐时间长。尝试不同的库。我喜欢structlog。这是键/值日志记录:

>>> import structlog
>>> log = structlog.get_logger()
>>> log.info('some event', val1='first value', val2='second value')
2018-08-16 21:01.02 some event                   val1=first value val2=second value

2) 如果需要,您实际上可以继续使用打印调用。这实际上是流行的十二因素应用程序方法的推荐最佳实践,其中日志事件只是标准输出上的行。通常每一行都是一个序列化的 json 对象,但这不是唯一明智的选择。

十二因素应用程序从不关心其输出流的路由或存储。它不应尝试写入或管理日志文件。相反,每个正在运行的进程都将其事件流(无缓冲)写入标准输出。

这里的想法是,在操作系统级别已经有强大而灵活的日志记录解决方案可用,我们应该利用这些解决方案,而不是重新发明轮子。例如,您可以只运行通过管道传输到syslog的应用程序:

./myapp.py | logger -t myapp &

推荐阅读