Skip to content

Instantly share code, notes, and snippets.

@nkhitrov
Last active May 17, 2023 16:15
Show Gist options
  • Save nkhitrov/62874c6805c8106fa1ac3f9164147887 to your computer and use it in GitHub Desktop.
Save nkhitrov/62874c6805c8106fa1ac3f9164147887 to your computer and use it in GitHub Desktop.
loguru_formatter
from loguru import logger
def console_formatter(record) -> str:
# WARNING !!!
# Функция должна возвращать строку, которая содержит только шаблоны для форматирования.
# Если в строку прокидывать значения из record (или еще откуда-либо),
# то loguru может принять их за f-строки и попытается обработать, что приведет к ошибке.
# Например, если нужно достать какое-то значение из поля extra, вместо того чтобы прокидывать его в строку формата,
# нужно прокидывать подстроку вида {extra[тут_ключ]}
# Стандартный формат loguru. Задается через env LOGURU_FORMAT
format_ = (
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
)
# Добавляем мета параметры по типу user_id, art_id, которые передаются через kwargs
# >>> logger.info(..., user_id=user_id)
extra = record["extra"]
if extra:
formatted = ", ".join(f"{key}" + "={extra[" + str(key) + "]}" for key, value in extra.items()) # noqa: ISC003
format_ += f" - <cyan>{formatted}</cyan>"
format_ += "\n"
if record["exception"] is not None:
format_ += "{exception}\n"
return format_
handler = {
"sink": sys.stdout,
"level": "INFO",
"serialize": True,
"format": console_formatter,
}
logger.configure(handlers=[handler])
logger.info("message", param1=10, param2=20)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment