uvicorn, fastapi logging & reload

정예슬·2022년 1월 24일
0

침착한 일상

목록 보기
5/14

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 공식 폴더]

profile
춘식이랑 함께하는 개발일지

0개의 댓글