feat :add log

This commit is contained in:
2026-05-24 09:55:56 +03:30
parent 2d99f0554d
commit 906cccd3fe
10 changed files with 98 additions and 42 deletions

View File

@@ -1 +1,4 @@
DATABASE_URL=sqlite:///./wheel.db
DATABASE_URL=sqlite:///./wheel.db
LOG_ENABLED=true
LOG_LEVEL=DEBUG

View File

@@ -7,11 +7,11 @@ from sqlalchemy.orm import Session
import schemas
from schemas import ItemResponse
from services import crud
from app.db.session import SessionLocal
from core.logger import get_logger
router = APIRouter()
logger = get_logger('admin')
def get_db():
@@ -25,7 +25,13 @@ def get_db():
# GET ALL ITEMS
@router.get("/items", response_model=list[ItemResponse])
def get_items(db: Session = Depends(get_db)):
return crud.get_items(db)
try:
items = crud.get_items(db)
logger.info(f"Items fetched: {len(items)} items")
return items
except Exception as e:
logger.error(f"Error fetching items: {e}")
raise
# CREATE ITEM
@@ -34,7 +40,13 @@ def create_item(
item: schemas.ItemCreate,
db: Session = Depends(get_db)
):
return crud.create_item(db, item.title)
try:
result = crud.create_item(db, item.title)
logger.info(f"Item created: {item.title}")
return result
except Exception as e:
logger.error(f"Error creating item: {e}")
raise
# DELETE ITEM
@@ -43,7 +55,15 @@ def delete_item(
item_id: int,
db: Session = Depends(get_db)
):
item = crud.delete_item(db, item_id)
if not item:
raise HTTPException(status_code=404, detail="Item not found")
return {"message": "Item deleted"}
try:
item = crud.delete_item(db, item_id)
if not item:
logger.warning(f"Item not found: {item_id}")
raise HTTPException(status_code=404, detail="Item not found")
logger.info(f"Item deleted: {item_id}")
return {"message": "Item deleted"}
except HTTPException:
raise
except Exception as e:
logger.error(f"Error deleting item: {e}")
raise

View File

@@ -6,54 +6,36 @@ from sqlalchemy.orm import Session
import schemas
from services import crud
from app.db.session import SessionLocal
from core.logger import get_logger
router = APIRouter()
logger = get_logger('user')
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
# GET ITEMS
@router.get(
"/items",
response_model=list[schemas.ItemResponse]
)
def get_items(
db: Session = Depends(get_db)
):
return crud.get_items(db)
@router.get("/items", response_model=list[schemas.ItemResponse])
def get_items(db: Session = Depends(get_db)):
try:
items = crud.get_items(db)
logger.info(f"User fetched items: {len(items)} items")
return items
except Exception as e:
logger.error(f"Error fetching items: {e}")
raise
# SPIN
@router.post("/spin")
def spin(
db: Session = Depends(get_db)
):
winner = crud.spin_wheel(db)
if not winner:
raise HTTPException(
status_code=400,
detail="No items available"
)
return {
"winner": {
"id": winner.id,
"title": winner.title
}
}
def spin(db: Session = Depends(get_db)):
try:
winner = crud.spin_wheel(db)
if not winner:

0
backend/core/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

50
backend/core/logger.py Normal file
View File

@@ -0,0 +1,50 @@
import logging
import os
from logging.handlers import RotatingFileHandler
from dotenv import load_dotenv
load_dotenv()
LOG_ENABLED = os.getenv('LOG_ENABLED', 'true').lower() == 'true'
LOG_LEVEL = getattr(logging, os.getenv('LOG_LEVEL', 'DEBUG').upper(), logging.DEBUG)
os.makedirs('logs', exist_ok=True)
FORMATTER = logging.Formatter(
'%(asctime)s | %(levelname)s | %(name)s | %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
def _file_handler(filename: str, level: int) -> RotatingFileHandler:
handler = RotatingFileHandler(
f'logs/{filename}',
maxBytes=5 * 1024 * 1024,
backupCount=3,
encoding='utf-8'
)
handler.setLevel(level)
handler.setFormatter(FORMATTER)
return handler
def _console_handler() -> logging.StreamHandler:
handler = logging.StreamHandler()
handler.setLevel(logging.INFO)
handler.setFormatter(FORMATTER)
return handler
def get_logger(name: str) -> logging.Logger:
logger = logging.getLogger(name)
if logger.handlers:
return logger
if not LOG_ENABLED:
logger.addHandler(logging.NullHandler())
return logger
logger.setLevel(LOG_LEVEL)
logger.addHandler(_file_handler('app.log', LOG_LEVEL))
logger.addHandler(_file_handler('error.log', logging.ERROR))
logger.addHandler(_console_handler())
return logger

1
backend/logs/app.log Normal file
View File

@@ -0,0 +1 @@
2026-05-24 09:52:10 | INFO | test | test

0
backend/logs/error.log Normal file
View File

Binary file not shown.