LINUX.ORG.RU

Как мне в питоне включить отладочный лог для единственного модуля?

 ,


1

1

Извините, но я прочитал https://docs.python.org/3/library/logging.html и нихрена не понял.

Во всех нормальных обертках для записи логов можно переопределить уровень логирования для конкретного модуля, сделав уровень выше дефолтного. А в питоне вы можете сделать его только ниже, а не выше.

Что они курили и что курить теперь мне?

UPD:

В качестве решения сделал модуль для манки-патчинга дефолтного логгера. См. в комментариях.

★★

Последнее исправление: wandrien (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

откуда logging узнает, из какого модуля идут логи?

Трассировка стека? С компилируемыми языками я такие трюки делал, не знаю можно ли такое в Питоне.

X512 ★★★★★
()
Последнее исправление: X512 (всего исправлений: 1)
Ответ на: комментарий от eternal_sorrow

откуда logging узнает, из какого модуля идут логи?

Так у каждого модуля собственный экземпляр.

class Blabla(object):
    def __init__(self):
        self.log = logging.getLogger("Blabla")
wandrien ★★
() автор топика
Ответ на: комментарий от wandrien

Вообще-то обычно пишут в начале модуля

logger = logging.getLogger(__name__)

И вот ему ты так же можешь задать уровень логирования своими дефайнами или что ты там крутишь. Зачем в каждый класс свой пихать?

Aswed ★★★★★
()
Ответ на: комментарий от Aswed

Зачем в каждый класс свой пихать?

Java головного мозга?

X512 ★★★★★
()
Ответ на: комментарий от t184256

ПЕРЕКОМПИЛИРУЕШЬ

Естественно, перекомпилируешь. Если я правлю текст модуля в ходе работы, мне его один хрен перекомпилировать.

А питон я в докер-образ пересобираю, например. Тоже не мгновенная готовность.

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

wandrien ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.