Я широко использую 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
?