TOP
class="layout-aside-left paging-number">
본문 바로가기
[파이썬 Projects]/<파이썬 웹개발>

[파이썬] 플라스크(Flask) - 로깅

by 기록자_Recordian 2024. 7. 16.
728x90
반응형
시작에 앞서
해당 내용은 <가장 빠른 풀스택을 위한 Flask & FastAPI>, Dave Lee 지음. BJ Public 출판.
내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.

로깅

 

로깅(Logging): 프로그램 실행 중에 발생하는 이벤트, 메시지, 데이터 등을 시간순으로 기록하는 과정.

이 기록들은 이후 문제 발생 시 원인 분석, 시스템 상태 모니터링, 사용자 행동 추적 등 다양한 목적으로 사용된다.

 

- 로그 레벨(log level): 로그 메시지는 중요도에 따라 여러 레벨로 분류된다.
DEBUG > 개발 중에 상세한 정보 제공
WARNING > 예상치 못한 일이 발생했지만, 프로그램이 작동하는 데는 문제가 없을 때 사용
INFO > 일반적인 작업의 성공 보고
ERROR > 심각한 문제 발생
CRITICAL > 아주 심각한 문제를 의미 (시스템이 잘못 동작할 수 있음을 나타냄)

- 로그 파일(log file): 로그 메시지들이 쓰이는 파일. 로그 분석 도구에 의해 분석된다.
로그 파일을 통해 문제의 경위를 추적하고, 시스템의 현재 상태를 파악하며, 보안 사고가 있었는지도 조사할 수 있다.

로깅의 필요성
  • 디버깅: 개발 중에 발생하는 예외나 에러를 추적하고 분석하는 데 필수. 로그는 문제의 근원을 빠르게 파악하는 데 도움을준다.
  • 모니터링: 로깅은 시스템의 상태를 모니터링하는 데 사용된다. (서버의 부하, 트랜잭션의 처리 시간, 사용자의 활동 등을 실시간으로 파악)
  • 문제 해결: 로그는 시스템에 발생한 문제를 해결하는 과정에서 중요한 단서를 제공.
  • 보안: 로그는 보안 사고의 감사 트레일을 제공. 비정상적인 접근 시도, 서비스 거부 공격, 시스템 침투 등 보안 위협을 감지하는 데 중요한 역할

[실무에서의 로깅]

1. 개발환경에서의 로깅: 개발자는 코드의 버그를 식별하고 수정하기 위해 DEBUG 레벨의 로그 사용

2. 운영 환경에서의 로깅: INFO 레벨 이상의 로그를 사용하여 시스템의 정상 작동 여부를 확인하고, ERROR 또는 CRITICAL 로그를 모니터링하여 잠재적인 시스템 문제를 식별

3. 사용자 행동 분석: 사용자의 클릭, 페이지 뷰, 트랜잭션 등의 정보를 기록하여 사용자 경험을 분석하고 개선하는 데 사용

4. 성능 측정; 시스템의 응답 시간과 자원 사용률을 기록하여 성능 병목 현상을 찾고 해결

5. 고급 로깅 기법: 구조화된 로깅, 로그의 중앙 집중화, 실시간 로그 분석 및 시각화를 통해 복잡한 시스템에서 발생하는 문제를 효과적으로 관리

 

플라스크에서는 파이썬의 표준 로깅 라이브러리를 사용하여 로깅 설정


로깅 기본 사용법

 

- 플라스크 애플리케이션을 생성하면 자동으로 로거가 설정된다. (플라스크 애플리케이션 내부에서 발생하는 이벤트 기록)

from flask import Flask
app = Flask(__name__)

 

- app.logger.setLevel() 메서드를 사용하여 로그 레벨 설정 가능

import logging
app.logger.setLevel(logging.DEBUG) # DEBUG 레벨 로깅 활성화

 

- logging.basicConfig() 함수를 사용하여 로그 메시지를 파일로 저장.

filename 매개변수로 로그 파일의 위치와 이름 지정, level 매개변수로 저장할 로그 레벨 설정

logging.basicConfig(filename='application.log', level=logging.BEBUG)

▶ 이 설정은 로깅 시스템을 초기화하고, 프로그램 실행 중에 발생하는 모든 로그를 application 파일에 기록하도록 지시한다.

 

로그 파일은 app.py와 동일한 폴더에 생성되며, 로그의 내용에는 로그 메시지 뿐만 아니라 해당 메시지가 기록된 시간과 로그 레벨도 포함된다. (이 파일을 통해 나중에 시스템의 문제 분석 및 진단 가능)

 

파이썬의 로깅 시스템은 계층적으로 구성되어 있으며, 각 파이썬 프로그램마다 최상위에는 'root' 로거가 있고, 이보다 아래 계층에 여러 'child'로거가 있을 수 있다.

 

- 플라스크의 app.logger 객체를 사용하여 로그 메시지를 작성

@app.route('/')
def home():
	app.logger.info('Info level log')
    app.logger.warning('Warning level log')
    return 'Hello, World!'

 

[전체 코드]

from flask import Flask
import logging

app = Flask(__name__)

# 로그 레벨 = DEBUG
app.logger.setLevel(logging.DEBUG)

# 로그를 파일로 저장. 추가적으로 날짜, 시간, 로그 레벨도 포함
logging.basicConfig(filename='application.log', level=logging.DEBUG,
                    format='%(asctime)s:%(levelname)s:%(message)s')

@app.route('/')
def home():
    # 여기서 각기 다른 로그 레벨의 로그 생성
    app.logger.debug('Debug level log') #디버그 메시지
    app.logger.info('Info lelvel log') # 정보 메시지
    app.logger.warning('Warning level log') # 경고 메시지
    app.logger.error('Error level log') # 에러 메시지
    app.logger.critical('Critical level log') # 크리티컬 메시지
    return 'Hello, World!'
    
if __name__ == '__main':
    app.run(debug=True)

 

웹 페이지를 불러올 때마다 플라스크 애플리케이션은 app.py 파일과 동일 폴더의 application.log 파일에 로그 메시지를 추가한다.

 

파일에 기록된 로그를 보면 각 로그 메시지 앞에는 자동으로 로그가 기록될 날짜와 시간, 로그 레벨이 포함되어 있다.

이는 logging.basciConfig 에서 지정한 포맷에 따른 것이며, 로그 파일을 확인함으로써 애플리케이션이 어떻게 실행되고 있는지, 어떤 이벤트가 발생했는지 등을 파악할 수 있다.


 

 

[파이썬] 플라스크(Flask) - 데이터베이스 (1)

시작에 앞서해당 내용은 , Dave Lee 지음. BJ Public 출판.내용을 토대로 작성되었습니다. 보다 자세한 사항은 해당 교재를 참고하시기 바랍니다.데이터베이스 (SQLAlchemy) 플라스크와 파이썬에서는 여

puppy-foot-it.tistory.com

 

728x90
반응형