Пропустить инструкции по отладке (и их содержимое), если для ведения журнала установлено значение INFO

#python #logging

#python #ведение журнала

Вопрос:

У меня есть программа, в которой я записывал журналы как info, так и debug.

Поскольку отладка содержит также вызовы медленных функций, моя программа работает медленно, даже если я установил для отладки значение INFO.

Возможно ли полностью пропустить эти строки из вычислений?

в следующем примере должно пройти 10 секунд, прежде чем будет выполнен информационный журнал.

 import logging.handlers
import sys
import time

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logging_stream_handler = logging.StreamHandler(sys.stdout)
logging_stream_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s --- %(message)s'))
logger.addHandler(logging_stream_handler)

logger.debug("aaa", time.sleep(10))
logger.debug("bbb")
logger.info("ccc")
  

Комментарии:

1. У вас не должно быть логики в ведении журнала!

2. logger.debug(«степень: %s», graph.degree(current_edge[направление]))

3. Либо вам нужна степень -> она должна быть в вашей обычной логике. Или вы этого не делаете -> это не имеет отношения к инструкции / функции debug.

4. @iScrE4m. Я с этим не согласен. Отладка предназначена для лучшего анализа чего-либо, возможно, с точки зрения программиста, и если мне нужно запустить функцию, которая выполняет глубокий анализ (обычно не требуется), в чем проблема? Я думаю, что предлагаемое решение поставить «if logger.isEnabledFor (ведение журнала. DEBUG): » для журнала ветвей все в порядке

5. Решение работает, и оно приятное и простое — просто убедитесь, что вам это действительно нужно, это все, что я говорю.

Ответ №1:

Вы можете проверить, включен ли регистратор для такого уровня с isEnabledFor помощью метода:

 if logger.isEnabledFor(logging.DEBUG):
    logger.debug("aaa", time.sleep(10))
    logger.debug("bbb")
  

Комментарии:

1. Я сделал это, благодаря всем строкам «logger.debug». если logger.isEnabledFor(ведение журнала. DEBUG): logger.debug(«aaa», time.sleep(10))

Ответ №2:

Вы не должны вести журнал внутри команд отладки. Если необходимо, то для того, чтобы пропустить это, вы должны разветвлять свой код.

 import logging.handlers
import sys
import time

logger = logging.getLogger()
logger.setLevel(logging.INFO)
logging_stream_handler = logging.StreamHandler(sys.stdout)
logging_stream_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s --- %(message)s'))
logger.addHandler(logging_stream_handler)

if logger.isEnabledFor(logging.DEBUG):
    logger.debug("aaa", time.sleep(10))
    logger.debug("bbb")
logger.info("ccc")