78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import logging
|
|
from fastapi import FastAPI
|
|
from core.config import settings
|
|
from api.api_v1.api import api_router
|
|
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
# Configuración inicial del logging (debe estar al inicio del archivo)
|
|
logging.config.dictConfig({
|
|
"version": 1,
|
|
"disable_existing_loggers": False,
|
|
"formatters": {
|
|
"default": {
|
|
"()": "uvicorn.logging.DefaultFormatter",
|
|
"fmt": "%(levelprefix)s %(asctime)s | %(name)s | %(message)s",
|
|
"datefmt": "%Y-%m-%d %H:%M:%S",
|
|
"use_colors": True,
|
|
},
|
|
"access": {
|
|
"()": "uvicorn.logging.AccessFormatter",
|
|
"fmt": '%(levelprefix)s %(asctime)s | %(client_addr)s | "%(request_line)s" %(status_code)s',
|
|
"datefmt": "%Y-%m-%d %H:%M:%S",
|
|
},
|
|
},
|
|
"handlers": {
|
|
"default": {
|
|
"formatter": "default",
|
|
"class": "logging.StreamHandler",
|
|
"stream": "ext://sys.stdout",
|
|
},
|
|
"access": {
|
|
"formatter": "access",
|
|
"class": "logging.StreamHandler",
|
|
"stream": "ext://sys.stdout",
|
|
},
|
|
},
|
|
"loggers": {
|
|
"": {"handlers": ["default"], "level": "DEBUG"},
|
|
"uvicorn.error": {"level": "DEBUG"},
|
|
"uvicorn.access": {"handlers": ["access"], "level": "DEBUG", "propagate": False},
|
|
},
|
|
})
|
|
|
|
def create_application() -> FastAPI:
|
|
"""Función factory para crear la aplicación FastAPI"""
|
|
application = FastAPI(
|
|
title=settings.APP_NAME,
|
|
description="EFC Microservice - Un microservicio profesional por AduanaSoft",
|
|
version=settings.APP_VERSION,
|
|
debug=settings.DEBUG,
|
|
)
|
|
|
|
# Configuración adicional para loggers específicos
|
|
app_logger = logging.getLogger("app")
|
|
app_logger.setLevel(logging.DEBUG if settings.DEBUG else logging.INFO)
|
|
|
|
# Incluir el router principal de la API
|
|
application.include_router(api_router, prefix="/api/v1")
|
|
|
|
return application
|
|
|
|
app = create_application()
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"], # O especifica ["http://localhost:5173"]
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
if __name__ == "__main__":
|
|
import uvicorn
|
|
uvicorn.run(
|
|
app,
|
|
host=settings.HOST,
|
|
port=settings.PORT,
|
|
log_config=None, # Usamos nuestra configuración
|
|
log_level="debug" if settings.DEBUG else "info",
|
|
reload=settings.DEBUG
|
|
) |