mirror of
https://github.com/wowlikon/LiB.git
synced 2026-02-04 04:31:09 +00:00
Улучшение логгирования
This commit is contained in:
+75
-54
@@ -1,5 +1,6 @@
|
||||
"""Модуль настроек проекта"""
|
||||
import os, logging
|
||||
from pathlib import Path
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from fastapi import FastAPI
|
||||
@@ -8,63 +9,75 @@ from toml import load
|
||||
|
||||
load_dotenv()
|
||||
|
||||
with open("pyproject.toml", 'r', encoding='utf-8') as f:
|
||||
config = load(f)
|
||||
with open("pyproject.toml", "r", encoding="utf-8") as f:
|
||||
_pyproject = load(f)
|
||||
|
||||
_APP_NAME = "library_service"
|
||||
|
||||
LOGGING_CONFIG = {
|
||||
"version": 1,
|
||||
"disable_existing_loggers": True,
|
||||
"formatters": {
|
||||
"json": {
|
||||
"class": "json_log_formatter.JSONFormatter",
|
||||
"format": "%(asctime)s %(name)s %(levelname)s %(message)s %(pathname)s %(lineno)d",
|
||||
},
|
||||
},
|
||||
"handlers": {
|
||||
"console": {
|
||||
"()": "rich.logging.RichHandler",
|
||||
"level": "INFO",
|
||||
"show_time": True,
|
||||
"show_path": True,
|
||||
"rich_tracebacks": True,
|
||||
},
|
||||
"file": {
|
||||
"class": "logging.FileHandler",
|
||||
"filename": Path(__file__).parent / "app.log",
|
||||
"formatter": "json",
|
||||
"level": "INFO",
|
||||
},
|
||||
},
|
||||
"loggers": {
|
||||
"uvicorn": {
|
||||
"handlers": [],
|
||||
"level": "INFO",
|
||||
"propagate": False,
|
||||
},
|
||||
_APP_NAME: {
|
||||
"handlers": ["console", "file"],
|
||||
"level": "INFO",
|
||||
"propagate": False,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
OPENAPI_TAGS = [
|
||||
{"name": "authentication", "description": "Авторизация пользователя."},
|
||||
{"name": "authors", "description": "Действия с авторами."},
|
||||
{"name": "books", "description": "Действия с книгами."},
|
||||
{"name": "genres", "description": "Действия с жанрами."},
|
||||
{"name": "loans", "description": "Действия с выдачами."},
|
||||
{"name": "relations", "description": "Действия со связями."},
|
||||
{"name": "misc", "description": "Прочие."},
|
||||
]
|
||||
|
||||
|
||||
def get_app(lifespan=None, /) -> FastAPI:
|
||||
"""Возвращает экземпляр FastAPI приложения"""
|
||||
if not hasattr(get_app, 'instance'):
|
||||
get_app.instance = FastAPI(
|
||||
title=config["tool"]["poetry"]["name"],
|
||||
description=config["tool"]["poetry"]["description"] + " | [Вернутьсяна главную](/)",
|
||||
version=config["tool"]["poetry"]["version"],
|
||||
lifespan=lifespan,
|
||||
openapi_tags=[
|
||||
{
|
||||
"name": "authentication",
|
||||
"description": "Авторизация пользователя."
|
||||
},
|
||||
{
|
||||
"name": "authors",
|
||||
"description": "Действия с авторами.",
|
||||
},
|
||||
{
|
||||
"name": "books",
|
||||
"description": "Действия с книгами.",
|
||||
},
|
||||
{
|
||||
"name": "genres",
|
||||
"description": "Действия с жанрами.",
|
||||
},
|
||||
{
|
||||
"name": "loans",
|
||||
"description": "Действия с выдачами.",
|
||||
},
|
||||
{
|
||||
"name": "relations",
|
||||
"description": "Действия с связями.",
|
||||
},
|
||||
{
|
||||
"name": "misc",
|
||||
"description": "Прочие.",
|
||||
},
|
||||
],
|
||||
)
|
||||
return get_app.instance
|
||||
poetry_cfg = _pyproject["tool"]["poetry"]
|
||||
return FastAPI(
|
||||
title=poetry_cfg["name"],
|
||||
description=f"{poetry_cfg['description']} | [Вернуться на главную](/)",
|
||||
version=poetry_cfg["version"],
|
||||
lifespan=lifespan,
|
||||
openapi_tags=OPENAPI_TAGS,
|
||||
)
|
||||
|
||||
|
||||
HOST = os.getenv("POSTGRES_HOST")
|
||||
PORT = os.getenv("POSTGRES_PORT")
|
||||
USER = os.getenv("POSTGRES_USER")
|
||||
PASSWORD = os.getenv("POSTGRES_PASSWORD")
|
||||
DATABASE = os.getenv("POSTGRES_DB")
|
||||
|
||||
if not USER or not PASSWORD or not DATABASE or not HOST:
|
||||
raise ValueError("Missing environment variables")
|
||||
|
||||
POSTGRES_DATABASE_URL = f"postgresql://{USER}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}"
|
||||
engine = create_engine(POSTGRES_DATABASE_URL, echo=False, future=True)
|
||||
def get_logger(name: str = _APP_NAME) -> logging.Logger:
|
||||
"""Возвращает логгер с указанным именем"""
|
||||
return logging.getLogger(name)
|
||||
|
||||
|
||||
def get_session():
|
||||
@@ -73,6 +86,14 @@ def get_session():
|
||||
yield session
|
||||
|
||||
|
||||
def get_logger(name: str = "uvicorn"):
|
||||
"""Возвращает логгер с указанным именем"""
|
||||
return logging.getLogger(name)
|
||||
HOST = os.getenv("POSTGRES_HOST")
|
||||
PORT = os.getenv("POSTGRES_PORT")
|
||||
USER = os.getenv("POSTGRES_USER")
|
||||
PASSWORD = os.getenv("POSTGRES_PASSWORD")
|
||||
DATABASE = os.getenv("POSTGRES_DB")
|
||||
|
||||
if not all([HOST, PORT, USER, PASSWORD, DATABASE]):
|
||||
raise ValueError("Missing required POSTGRES environment variables")
|
||||
|
||||
POSTGRES_DATABASE_URL = f"postgresql://{USER}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}"
|
||||
engine = create_engine(POSTGRES_DATABASE_URL, echo=False, future=True)
|
||||
|
||||
Reference in New Issue
Block a user