Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2019, 12:36   #1
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
Восклицание Не работает вывод логгера уровня INFO - мне нужно выставлять уровень логирования не у handler, а у logger?

Здравствуйте.
Был вот такой логгер, вывод уровня INFO работал.
Код:
# -*- coding: utf-8 -*-
import logging

log_file_name = f'{__file__}.log'
logging.basicConfig(format='%(asctime)s - %(levelname)s - %(message)s',
                    level=logging.INFO,
                    filename=log_file_name,
                    )
logging.info('Привет')
Потребовалось изменить поведение. Если локально, то лог в файл, если на heroku, то в консоль. Сделал вот такие изменения. Теперь сообщения уровня INFO в лог не выводятся, ошибок никаких нет.
Код:
log_file_name = f'{__file__}.log'
logger = logging.getLogger(__name__)
if os.environ.get('DYNO') is None:
    handler = logging.FileHandler(log_file_name)
else:
    handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info('Привет')
Уровни WARNING, ERROR, CRITICAL без проблем выводит.

Подскажите, пожалуйста, в чем может быть проблема?
Arkuz вне форума Ответить с цитированием
Старый 06.12.2019, 13:12   #2
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Цитата:
По умолчанию корневому журналу присваивается уровень WARN, поэтому каждый журнал с меньшим уровнем (например logging.info("info")) игнорируется.
И ему пофиг, какой уровень Вы выставили в обработчике - он отсечёт записи раньше.
Обработчик с уровнем ниже, чем у logging.root() делать бессмысленно
Black Fregat вне форума Ответить с цитированием
Старый 06.12.2019, 14:46   #3
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Сообщение от Black Fregat Посмотреть сообщение
И ему пофиг, какой уровень Вы выставили в обработчике - он отсечёт записи раньше.
Обработчик с уровнем ниже, чем у logging.root() делать бессмысленно
Спасибо. Я правильно понимаю, что мне нужно выставлять уровень логирования не у handler, а у logger?

Код:
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
Arkuz вне форума Ответить с цитированием
Старый 06.12.2019, 15:17   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Я бы на всякий случай у обоих выставил. Не помешает.
Но, вроде, у handler по умолчанию NOTSET, поэтому на результат влиять не должно
Black Fregat вне форума Ответить с цитированием
Старый 06.12.2019, 15:22   #5
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Black Fregat, спасибо!
Данное решение помогло!
Код:
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
Вопрос закрыт.
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создайте сайт (копия эл. дневника, но чтобы я сам мог выставлять нужные мне оценки) Roman1205 Фриланс 11 11.11.2017 01:44
Вывод в СОМ порт фикс.уровня dim3740 C# (си шарп) 16 02.04.2014 08:44
По Умолчанию Функция Логирования В Txt Файл Argonaft Общие вопросы C/C++ 1 22.11.2013 18:20
Vectored handler goluzov Помощь студентам 0 15.04.2012 06:19
CEdit Dblclick handler nusik Общие вопросы C/C++ 0 09.07.2009 11:02