[파이썬] aiohttp 서버 로깅 설정하기

aiohttp logo

aiohttp는 Python으로 개발된 웹 서버 및 웹 애플리케이션 프레임워크입니다. 이 프레임워크를 사용하면 간단하게 웹 애플리케이션을 만들 수 있고, 다양한 기능을 추가하여 더욱 강력한 애플리케이션을 개발할 수 있습니다.

서버 로깅은 애플리케이션의 동작 및 오류를 추적하고 디버깅하기 위해 매우 중요한 요소입니다. aiohttp는 기본적으로 로깅을 지원하지만, 로깅 기능을 세부적으로 설정하고 커스터마이징하기 위해서는 몇 가지 추가 작업이 필요합니다.

이번 블로그 포스트에서는 aiohttp 서버에서 로깅을 설정하는 방법에 대해 알아보겠습니다.

1. logging 라이브러리 임포트하기

먼저, 로깅을 위해 Python의 logging 라이브러리를 임포트해야 합니다. 아래와 같이 코드를 추가해주세요.

import logging

2. 로거 생성하기

로깅을 위해 로거(logger)를 생성해야 합니다. 로거는 로그를 기록하는 객체로, 커스텀 포매터나 필터를 적용할 수 있습니다.

logger = logging.getLogger(__name__)

3. 로그 레벨 설정하기

로그 레벨은 로거가 어떤 수준의 로그를 기록할지를 결정합니다. logging 모듈에는 다양한 로그 레벨이 있으며, 개발 단계와 배포 단계에 따라 적절한 레벨을 선택해야 합니다.

예를 들어, 개발 단계에서는 DEBUG 레벨로 설정하여 상세한 디버깅 정보를 확인할 수 있고, 배포 단계에서는 INFO 레벨로 설정하여 필요한 정보만 기록하도록 할 수 있습니다.

logger.setLevel(logging.DEBUG)

4. 핸들러 추가하기

핸들러(handler)는 로그 메시지를 출력하기 위한 장치입니다. aiohttp 서버에서는 기본적으로 stdout으로 출력하도록 설정되어 있으므로, 추가적인 핸들러를 설정할 필요는 없습니다.

만약 파일로 로그를 저장하고 싶은 경우, logging.handlers 모듈을 사용하여 파일 핸들러를 추가할 수 있습니다.

logfile = '/path/to/logfile.log'
file_handler = logging.FileHandler(logfile)
logger.addHandler(file_handler)

5. 로그 포매터 설정하기

로그 포매터(formatter)는 로그 메시지의 출력 형식을 정의합니다. 기본적으로 logging 모듈은 시간, 로그레벨, 로그 메시지 등을 함께 출력하도록 설정되어 있습니다.

자신만의 로그 포매터를 만들고 싶다면, 아래 코드를 사용하여 설정할 수 있습니다.

formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)

6. aiohttp.Server 로깅 설정하기

마지막으로, aiohttp 서버에서 로깅을 활성화해야 합니다. aiohttp는 기본적으로 서버 시작 및 종료 이벤트를 로그로 출력합니다.

import aiohttp

async def start_app():
    app = aiohttp.web.Application()
    app.router.add_get('/', hello)
    
    # STDOUT 로그 출력
    aiohttp.web.run_app(app)

로그 레벨, 핸들러, 포매터는 위에서 설정한 것과 동일하게 적용됩니다. aiohttp 서버 객체에 logger를 설정하여 커스텀 로깅을 적용할 수도 있습니다.

import aiohttp

async def start_app():
    app = aiohttp.web.Application()
    app.router.add_get('/', hello)
    
    # 커스텀 로그 설정
    aiohttp.web.run_app(app, access_log=logger)

이제 aiohttp 서버에서 로깅을 설정하는 방법에 대해 알아보았습니다. 로깅은 애플리케이션 개발과 운영에서 매우 중요한 역할을 합니다. 추가 작업 없이도 aiohttp는 기본적으로 로깅을 지원하지만, 세부 설정 및 커스터마이징을 위해서는 위에서 소개한 방법을 사용하면 됩니다.

Happy coding! 🚀