기타 (Other)

[python] logging

Kim MyeongOk 2024. 12. 7. 12:06

로깅 이란?

프로그램이 실행되는 동안 발생하는 이벤트에 대해 메시지를 기록하는 것을 의미하며, 각 이벤트에 대해 메시지 또는 로그 항목이 기록됨. 이러한 log 메시지는 시스템 작동을 모니터링하고 디버깅 중에 사용할 수 있다.

 

예시로 나 혼자 작업한 결과물에서 에러가 난 경우, 비교적 쉽게 문제를 해결할 수 있지만,

협업을 하면서 다른 팀원과 작업한 결과물에서 에러가 났거나 원하는 결과가 아닌 경우에 로그 파일이 없다면 난항을 겪을 수도 있다.

 

로그 기록은 아래 2가지로 종류로 기록될 수 있음.

1. 로그 파일에 기록

2. 시스템 내에서 기록

 

그 외...

더보기
더보기

유형

a.이벤트 로그

: 시스템 실행 중에 발생하는 이벤트를 기록하여 시스템 활동을 이해하고 문제를 진단하는데 사용한다. 사용자 상호 작용이 거의 없는 프로그램의 경우, 이벤트 로그는 하나의 이벤트가 발생했을 때 해당 이벤트를 이해하는데 필수적이다.

 

: 여러 개의 소스 파일이 작성되게 되었고 서비스를 제공하고자 실행했을 때 에러가 나거나 원하는 결과가 나오지 않을 때 어디에서 잘못되었는지 살펴보는데 유용함. 통신을 통해 서로 다른 서버에서 관련 이벤트 간에 발생할 수 있는 문제를 확인할 수 있고, 해당 문제를 해결할 수 있는 key가 되어 프로그램 유지/보수를 진행함.

 

b.거래 로그

 

c.메시지 로그

 

d.서버 로그

 

 

로깅 사용 목적

로깅을 사용하면 각 logging의 레벨을 지정하여 개발 중에 발생하는 예외나 에러를 추적하고 분석(모니터링)하는데 용이함.

  • 디버깅: 개발 중에 발생하는 예외나 에러를 추적하고 분석하는데 필수적으로, 문제의  근원을 빠르게 확인하는데 도움이 된다.
  • 모니터링: 서버의 부라, 트랜잭션 처리 시간, 사용자의 활동 등을 실시간으로 파악할 수 있다.
  • 트러블슈팅: 시스템 문제를 해결하는 과정에서 중요한 단서를 제공하는게, 언제, 어디서, 왜 문제가 발생했는지 식별할 수 있다.
  • 감사: 보안 사고의 감사 트레일(audit trail)을 제공한다. 비정상적인 접근 시도, 서비스 거부(DoS) 공격, 시스템 침투 등의 보안 위협을 감지할 수 있음.

 

로그 레벨

  • DEBUG: 개발 중에 상세한 정보를 기록해서 문제를 추적하고 디버깅하는데 도움을 준다.
  • INFO: 일반적인 작업의 성공을 기록해서 프로그램이 정상적으로 동작하는지 확인할 수 있다.
  • WARNING: 예상치 못한 문제가 발생했지만, 프로그램 동작에는 문제가 없을 때 사용한다.
  • ERROR: 심각한 문제가 발생했을 때 기록하는 것으로, 이때 프로그램의 일부 기능이 동작하지 않을 수 있다.
  • CRITICAL: 아주 심각한 문제가 발생했을 때 기록하고, 시스템이 잘못 동작하고 있거나 멈춰서 바로 프로그램을 수정해야 할 수도 있다.

 

로그 파일

로그 파일은 위 로그 메시지들이 쓰이는 파일로, 이 파일을 통해 나중에 로그를 확인하고 분석할 수 있다.


 

파이썬에서 로깅 설정하기

파이썬에서는 logging 모듈을 통해 로깅을 설정할 수 있다.

예시 코드

from flask import Flask
import logging
import logging.basicConfig as Config

app = Flask(__name__)
app.logger.setLevel(logging.DEBUG)

Config(
    filename='application.log', 
    level=logging.DEBUG, 
    format='%(asctime)s:%(levelname)s:%(message)s'
)

@app.route('/')
def home():
    app.logger.debug('Debug level')
    app.logger.info('Info level')
    app.logger.warning('Warning level')
    app.logger.error('Error level')
    app.logger.critical('Critical level')
    return 'Hello, World! kmo'

if __name__ == '__main__':
    app.run(debug=True)

 

'기타 (Other)' 카테고리의 다른 글

아파치 카프카  (0) 2025.01.21
[python] pandas  (4) 2025.01.09
[python] decorator 예제  (0) 2024.12.07
[python] Flask 기본 통신 예제  (0) 2024.11.09
[python] MQTT 예제  (0) 2024.09.22