phtimofeeff
@phtimofeeff
МИРЭА Прикладная математика

Не настраиваются разные уровни логирования в python logging?

Есть скрипт:

import logging
import tg_logger
import os
from dotenv import load_dotenv
from pathlib import Path
from logging.handlers import RotatingFileHandler

dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
if os.path.exists(dotenv_path):
    load_dotenv(dotenv_path)
token = os.getenv("TELEGRAM_BOT_TOKEN")
users = [os.getenv("TELEGRAM_CHAT_ID")]
script_path = Path(__file__).resolve()
script_name = os.path.splitext(os.path.basename(script_path))[0]
log_dir = script_path.parent
log_file = Path(str(log_dir) + "/" + script_name + ".log")
logger = logging.getLogger(script_name)
tg_logger.setup(logger, token=token, users=users, tg_format="<b><u>%(name)s</u> : %(levelname)s</b>\n\n<code>%(message)s</code>")
file_handler = RotatingFileHandler(log_file, maxBytes=1024*1024, backupCount=10)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
logger.addHandler(file_handler)
logger.setLevel(logging.WARNING)

logger.info(f"Hello from tg_logger by {script_name}")
logger.warning(f"Test WARNING {script_name}")
#logger.error(f"Test ERROR {script_name}")


Так вот логи уровня WARNING и выше уходят и в Телеграмм и в файл, а логи уровня INFO только в файл не уходят.
Вчера до 3-х ночи промучался и видимо уже совсем глаз замылился и не вижу решения.
Очень нужно, помогите!
  • Вопрос задан
  • 94 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ты задал уровень WARNING для самого логгера (не для хэндлеров), поэтому он INFO отбрасывает сходу. До хэндлеров ничего не доходит просто.
Я бы использовал эту либу немного по-другому (пример с её гитхаба)
t_handler = tg_logger.TgLoggerHandler(users=[...], token=TELEGRAM_TOKEN)
t_handler.setLevel(logging.WARNING)
logger.addHandler(t_handler)

Так куда более похоже на обычные лог-хэндлеры, проще управлять и читать даже если с либой мало знаком.
Ну или если очень хочется setup(), то так:
t_handler = tg_logger.setup(logger, token=token, users=users, tg_format="<b><u>%(name)s</u> : %(levelname)s</b>\n\n<code>%(message)s</code>")
t_handler.setLevel(logging.WARNING)


Так что логгеру задай уровень подетальнее, INFO или даже DEBUG, а тонкую настройку делай на уровне хэндлеров.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы