from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import logging
app = FastAPI()
# 기본 로깅 설정
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("app_logger")
# 요청 바디 모델 정의
class DebugLevel(BaseModel):
level: str
# 디버깅 레벨 맵핑
LOG_LEVELS = {
"CRITICAL": logging.CRITICAL,
"ERROR": logging.ERROR,
"WARNING": logging.WARNING,
"INFO": logging.INFO,
"DEBUG": logging.DEBUG,
"NOTSET": logging.NOTSET,
}
@app.post("/set_debug_level")
async def set_debug_level(debug_level: DebugLevel):
level_name = debug_level.level.upper()
if level_name not in LOG_LEVELS:
raise HTTPException(status_code=400, detail="Invalid debug level")
new_level = LOG_LEVELS[level_name]
logging.getLogger().setLevel(new_level)
return {"message": f"Log level set to {level_name}"}
@app.get("/")
async def read_root():
logger.debug("Debug log message")
logger.info("Info log message")
logger.warning("Warning log message")
return {"message": "Hello World"}
# 애플리케이션 시작
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
전체 로깅 레벨 설정: logging.getLogger().setLevel(new_level)을 사용하여 루트 로거의 레벨을 설정한다. 로트 로거 설정을 변경하여 어플리케이션 전체의 로깅 레벨을 변경할 수 있다.
POST 요청 처리: /set_debug_level 엔드포인트를 통해 디버깅 레벨을 변경합니다. 요청 바디는 DebugLevel 모델을 사용하여 검증되며, level 필드에는 설정할 로깅 레벨이 포함되어야 합니다.
'Software Engineering > Python' 카테고리의 다른 글
| sample project 연습 (1) | 2024.06.20 |
|---|---|
| timer 유틸리티 클래스 (0) | 2024.06.19 |
| pydantic을 사용하여 환경변수 로딩하기 (1) | 2024.06.09 |
| fastapi get 요청으로 app 종료하기 (0) | 2024.06.09 |
| pymysql package 사용 예제 (0) | 2024.06.05 |