API 작업 중에 두가지 문제가 생겼다. 😥
1. uvicorn access log가 시스템 로그에 찍히는 문제
2. 특정 path 파일이 변화가 있을 때 프로세스를 재실행 해야 함.
문제해결을 위해 작성한 코드는 다음과 같다.
from fastapi import FastAPI from pydantic import BaseModel import uvicorn app = FastAPI() class values(BaseModel) : '''request로 받아올 인자 : 데이터 타입을 입력, 필수 요소가 아닌 경우 [Optional[type]] 로 써주면 된다''' ''' from typing import Optional 로 import 필요 ''' val1 = int val2 = str @app.on_event("startup") async def startup_event() : '''on_event로 지정하면 request 올 때마다 해당 함수를 실행시킬 수 있다''' access_log() @app.post('/url') async def test(i : values) : ''' response 할 내용 추가 ''' response = '' return response # uvicorn if __name__ == '__main__' : ''' 1.access_log = False로 지정하면 시스템 로그에 쌓이는 걸 막을 수 있다. 2. reload=True, reload_dirs=[path] 를 지정하면 해당 디렉토리에 .py 파일이 업데이트 될 때마다 프로세스를 자동으로 리로드한다. ''' uvicorn.run('main:app', host='0.0.0.0', port=8000, access_log=False, reload_dirs=[path], reload=True )
def access_log() : ''' 엑세스 로그 포맷은 다음과 같이 지정''' logger = logging.getLogger('uvicorn.access') console_formatter = uvicorn.logging.ColourizedFormatter( "{asctime} - {message}", style="{", use_colors=True) handler = logging.handlers.TimedRotatingFileHandler(ACCESS_LOG_PATH, when='midnight', interval=1, backupCount=1) handler.setFormatter(console_formatter) logger.addHandler(handler)
*- 결과 -*
사진과 같이 [access date] - [request ip : port] - ["request type / url" result] 형식으로
access log가 찍히는 것을 확인할 수 있다. (일부 정보 가려놓음)
💡 작업중 참고한 사이트 >>> [uvicorn 공식 폴더]