Repository navigation
Expand file tree
/
Copy pathmain.py
More file actions
98 lines (76 loc) · 2.77 KB
/
Copy pathmain.py
File metadata and controls
98 lines (76 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
import time
import logging
from logging.handlers import RotatingFileHandler
import os
from api.v1 import auth, users, documents, chatbot
from db.session import engine
from db.base import Base
# Tạo thư mục logs nếu chưa có
os.makedirs("logs", exist_ok=True)
# Cấu hình logging xoay vòng
def setup_logging():
# Tạo logger chính
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# Xóa handlers cũ nếu có
for handler in logger.handlers[:]:
logger.removeHandler(handler)
# Handler để ghi vào file với xoay vòng
file_handler = RotatingFileHandler(
"logs/app.log",
maxBytes=5*1024*1024, # 5MB
backupCount=3, # Giữ 3 file backup
encoding='utf-8'
)
file_handler.setLevel(logging.INFO)
# Handler để print ra terminal
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# Format cho log
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# Thêm handlers vào logger
logger.addHandler(file_handler)
logger.addHandler(console_handler)
return logger
# Khởi tạo logging
logger = setup_logging()
app = FastAPI(title="FastAPI App with Login")
# CORS
# origins = ["http://localhost:3000", "http://127.0.0.1:3000"]
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# Middleware để log requests và responses
@app.middleware("http")
async def log_requests(request: Request, call_next):
start_time = time.time()
# Log request
logger.info(f"Request: {request.method} {request.url}")
# Process request
response = await call_next(request)
# Log response với status code
process_time = time.time() - start_time
logger.info(f"Response: {response.status_code} - {request.method} {request.url} - {process_time:.3f}s")
return response
# Tạo tables
Base.metadata.create_all(bind=engine)
# Import models để đảm bảo tables được tạo
import models.user # This ensures the User table is created
# Routers
app.include_router(auth.router, prefix="/api/v1/auth", tags=["Auth"])
app.include_router(users.router, prefix="/api/v1/users", tags=["Users"])
app.include_router(documents.router, prefix="/api/v1/documents", tags=["Documents"])
app.include_router(chatbot.router, prefix="/api/v1/chatbot", tags=["Chatbot"])
# Log khi khởi động app
logger.info("FastAPI application started successfully!")