регистрация Python: отключить сообщения от определенной импортированной функции - PullRequest
0 голосов
/ 17 октября 2019

Я знаю, как подавить сообщения журнала до определенного уровня журнала от импортированного модуля:

import logging
logging.getLogger("module_name").setLevel(logging.WARNING)

Я хочу знать, возможно ли подавление сообщений журнала только от определенной функции / класса вимпортированный модуль (и сохранить все остальные сообщения в модуле).

Я попробовал это:

logging.getLogger("module_name.function_name").setLevel(logging.WARNING)

, но это не сработало. Возможно ли это?

1 Ответ

0 голосов
/ 22 октября 2019

Я придумал это в конце концов, основываясь на ведении журнала с фильтрами :

Содержимое my_module.py:

import logging

logger = logging.getLogger(__name__)


def func1():
    logger.debug('Running func1!')


def func2():
    logger.debug('Running func2!')

Я хочу игнорировать любые сообщенияс func2, но сохраните все сообщения с func1.

Содержимое main.py:

import logging

import my_module

logging.basicConfig(level=logging.DEBUG)


class IgnoreFunc2(logging.Filter):
    def filter(self, record):
        return not record.funcName == 'func2'


# this relies on knowing the variable name in my_module
my_module.logger.addFilter(IgnoreFunc2())


def main():
    my_module.func1()
    my_module.func2()


if __name__ == '__main__':
    main()

Вывод:

DEBUG:my_module:Running func1!
...