Добавление уровня журнала с Python 3.7 - PullRequest
1 голос
/ 07 марта 2019

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

Как добавить собственный уровень журналирования в средство ведения журнала Python

Python3 добавить уровень ведения журнала

На мой верхний уровень __init__.py я положил:

    import logging

    logging.VERBOSE = 15 
    logging.addLevelName(logging.VERBOSE, "VERBOSE")

    def verbose(self, message, *args, **kws):
        if self.isEnabledFor(logging.VERBOSE):
            # Yes, logger takes its '*args' as 'args'.
            self._log(logging.VERBOSE, message, args, **kws) 

    setattr(logging, 'verbose', verbose)
    setattr(logging.Logger, 'verbose',verbose)
#also tried
# logging.Logger.verbose=verbose
# logging.verbose=verbose

logging.getLogger(__name__).addHandler(logging.NullHandler())

В различных других классах и подмодулях я ожидаю, что смогу тогда:

import logging
.
.
.
logging.verbose("Someone sent us up the bomb")

Но все, что меня заводит, это:

TypeError: verbose() missing 1 required positional argument: 'message'

Если я переключусь на:

logging.log(logging.VERBOSE, "Intent Returned: " + intent_name)

Мне не выдается исключение, но я не печатаю ни одного сообщения.

1 Ответ

1 голос
/ 07 марта 2019

Самость - это то, что мешает этому работать, так как кажется, что вы не работаете из класса.

Если вы используете Basic Config , вы можете добавить пользовательский уровень таким образом в __init__.py или __main__.py:

import logging
log_level = 15  

logging.basicConfig(
    level=int(log_level),
    format="%(asctime)s [%(threadName)-12.12s] [%(levelname)-7.7s]  %(message)s",
    handlers=[
        logging.FileHandler('put your log path here'),
        logging.StreamHandler()
    ]
)

def verbose(msg, *args, **kwargs):
    if logging.getLogger().isEnabledFor(15):
        logging.log(15, msg)

logging.addLevelName(15, "VERBOSE")
logging.verbose = verbose
logging.Logger.verbose = verbose

# now try the new level
logging.verbose("This is verbose logging")

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

...