python3记录框架中的字符串格式速度

时间:2018-12-03 17:23:15

标签: python performance logging

我在应用程序中广泛使用logger.debug,有没有办法在更改日志级别时不让python格式化字符串?

我已经运行了该测试:

import time
import sys
import logging

logger = logging.getLogger('example_logger')
logger.setLevel(logging.INFO)

#handler = logging.StreamHandler(sys.stdout)       
handler = logging.NullHandler()      
handler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)

logger.addHandler(handler)
st_time = time.time()
for i in range(0, 100000):
    logger.info("Test {} - {} - {}".format("bar", 43, "foobar"))
    logger.error("Test {} - {} - {}".format("bar", 43, "foobar"))
print("--- %s seconds ---" % (time.time() - st_time))

st_time = time.time()
for i in range(0, 100000):
    logger.info("Test %s - %d - %s", "bar", 43, "foobar")
    logger.error("Test %s - %d - %s", "bar", 43, "foobar")
print("--- %s seconds ---" % (time.time() - st_time))

st_time = time.time()
for i in range(0, 100000):
    if handler.level is logging.INFO:
        logger.info("Test {} - {} - {}".format("bar", 43, "foobar"))
    logger.error("Test {} - {} - {}".format("bar", 43, "foobar"))
print("--- %s seconds ---" % (time.time() - st_time))

这是结果:

--- 1.9106299877166748 seconds ---
--- 1.7931029796600342 seconds ---
--- 0.9742612838745117 seconds --

我期望第二个测试的速度一样快,即使禁用了该级别,最后一个但显然python仍在格式化logger.info中的字符串。

是否有一种更好的方法可以在不使用if的情况下获得最后的结果?

0 个答案:

没有答案