Files
microservice/main.py

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
)