我使用的是标准的Python记录模块在我的Python应用程序:懒惰记录消息字符串评估
import logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger("log") while True: logger.debug('Stupid log message " + ' '.join([str(i) for i in range(20)])) # Do something
的问题是,虽然调试级别不启用,那个愚蠢的日志消息是在每次循环迭代计算,这严重损害了性能。
有没有解决方案?
在C++中,我们有log4cxx
包,提供了这样的宏:
LOG4CXX_DEBUG(logger, messasage)
这有效地评估为
if (log4cxx::debugEnabled(logger)) { log4cxx.log(logger,log4cxx::LOG4CXX_DEBUG, message) }
但因为在Python中没有宏(据我所知),如果有一个有效的方法做日志?
简单而高效。我喜欢。这应该可以获得更多的赞誉。 – Rockallite 2014-09-16 13:26:53
效率取决于手头的情况,您应该始终以自己的方案为基准。就我而言,懒惰的日志记录不需要任何参数,但可以在调用'__str__'时从类中收集东西。所以基本上,我得到了几乎相同的结果。看到我的评论[这里](https://gist.github.com/schnittstabil/9372911#gistcomment-1910973) – guyarad 2016-11-01 07:47:52
@guyarad:你也需要花时间来创建'lazyjoin'实例。另请参阅我的答案[Python:如何做懒惰调试日志记录](http://stackoverflow.com/questions/21377020/python-how-to-do-lazy-debug-logging/22204021#22204021)。 – schnittstabil 2016-11-01 18:46:17