Почему мои журналы более низкого уровня не записывают в файл, а ошибки и выше делают? - PullRequest
0 голосов
/ 09 февраля 2019

Я создал небольшую функцию для настройки ведения журнала, с обработчиком файлов для «всего» и smtphandler для ошибок и выше.Журналы ошибок записывают в файл журнала и отправляют правильно на электронную почту, но debug, info, notset не делают, хотя setlevel установлен в 0 для обработчика файлов.Почему это?Код ниже

#logsetup.py
import logging
import logging.handlers

def _setup_logger(name, log_file):
    """Function to setup logger"""

    logger = logging.getLogger(name)

    #Create Formatters
    file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    mail_formatter = logging.Formatter('%(name)s - %(message)s')

    #Create handler, set formatting, set log level
    file_handler_obj = logging.FileHandler(log_file)
    file_handler_obj.setFormatter(file_formatter)
    file_handler_obj.setLevel(0)

    #Create handler, set formatting, set log level
    smtp_handler_obj = logging.handlers.SMTPHandler(mailhost=('smtp.gmail.com', 587),
                        fromaddr='mymail@example.com',
                        toaddrs='mymail@example.com',
                        subject='Error in Script',
                        credentials=('mymail@example.com', 'pwexample'),   #username, password
                        secure=())
    smtp_handler_obj.setFormatter(mail_formatter)
    smtp_handler_obj.setLevel(logging.ERROR)

    # add the handlers to logger
    logger.addHandler(smtp_handler_obj)
    logger.addHandler(file_handler_obj)

    return logger

#mytest.py
import time
import logsetup

if __name__ == '__main__':

    TEST_SETTINGS = config_funcs._get_config('TEST_SETTINGS')

    logtime = time.strftime('%Y%m%d') # -%H%M%S")
    log = logsetup._setup_logger('TEST', TEST_SETTINGS['logging_dir'] + 'Py_Log_%s.log' % logtime)

    log.error('Writes to log file and sends email')
    log.debug('Supposed to write to log file, does nothing.')

1 Ответ

0 голосов
/ 11 февраля 2019

Очевидно, что для ведения журнала требуется собственный уровень ведения журнала помимо обработчиков.Установка logger.setLevel (logging.DEBUG) непосредственно перед возвратом логгера заставляет его работать правильно.Документация гласит:

Когда создается регистратор, уровень устанавливается равным NOTSET (что приводит к обработке всех сообщений, когда регистратор является корневым регистратором, или делегированию родительскому элементу, когда регистратор не является-корневой регистратор).Обратите внимание, что корневой регистратор создается с уровнем WARNING.

Это означает, что если обработчики находятся на более низком уровне, чем корневой регистратор (который не является ОШИБКОЙ, а DEBUG -), то обработчики, которые, как мне кажется,ребенок, потому что я получаю именованный регистратор?Не совсем уверен в причинах этого, но это «исправляет» это, если кто-то придет к этому позже.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...