我在应用程序中广泛使用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
的情况下获得最后的结果?