본문 바로가기
Python

[Python] logging

by ds31x 2023. 12. 18.

logging을 통해 프로그램 동작 상태 등을 로그로 남길 경우,

프로그램의 사후 진단을 보다 효과적으로 할 수 있기 때문에,

문제 분석이나 디버깅 등에 유용하게 사용할 수 있음.

 

logging을 사용할 경우,

  • 소스 코드의 수정 없이
  • 모든 정보를 한꺼번에 출력하는 것이 아닌,
  • 원하는 정보 레벨(log level로 지정) 이상의 로그 메시지를
  • 관련 이벤트 발생 시점과 함께 기록하는 것이 가능함.

log levels

Python의 logging은 다음의 5단계의 levels를 지원함. 낮은 단계의 log level이 지정된 경우 보다 높은(=심각한) log levels가 같이 기로됨.

Level 언제 사용되는가?
DEBUG 가장 낮은 심각도와 가장 상세한 수준의 정보를 가지고 있음. 주로 디버깅 등에서 문제의 원인을 파악하는데 사용됨.
INFO 프로그램이 정상적으로 작동하는지를 tracking하기 위한 메시지들.
WARNING 예상치 못한 event 또는 추후 문제가 될 수 있는 경우에 사용됨.
ERROR 프로그램이 의도한 기능을 수행하지 못하는 수준의 심각한 에러 발생시 사용.
CRITICAL 가장 심각한 수준의 에러가 발생한 경우로 프로그램의 실행이 중단될 수 있는 수준을 의미.

간단한 사용법

logging.basicConfig 로 최초로 한번만 설정해주고 난 이후에,

logging.debug, logging.info, logging.warning, logging.error, logging.critical 등을 통해 로깅 메시지를 남김.

import logging

logging.basicConfig(
	format='%(asctime)s %(levename)s:%(message)s',
    level=logging.INFO,
    datefmt='%m-%d-%Y %I:%M:%S %p',
)

logging.debug('debug message example!')

logging message format attributes

 

로그 레코드의 format에 사용되는 attributes 중 많이 사용되는 것을 간략히 정리함.

Attributer Name Format Description
asctime %(asctime)s 사람이 읽을 수 있는 로그 레코드가 생성된 시간 2023-12-18 18:20:55, 810 형태임 (쉼표 뒤의 숫자는 밀리세컨드)
created %(created)f time.time()이 반환하는 시간으로 로그 레코드가 생성된 시간
filename %(filename)s pathname 파일명 부분
funcName %(funcName)s 로깅 호출을 포함하는 function의 이름
levelname %(levelname)s Logging Level
lineno %(lineno)d 로깅 호출이 일어난 소스의 line number
message %(message)s 로깅 메시지. msg % args 의 형태임.
module %(module)s 모듈 (filename 에서 확장자 뺀 이름)
name %(name)s 사용된 logger의 이름.
pathname %(pathname)s 로깅호출이 일어난 소스 파일의 전체 경로명
process %(process)d process ID
processName %(processName)s process name
thread %(thread)d thread ID
threadName %(threadName)s thread name

보다 자세한 건 다음 URL 참고

https://docs.python.org/3/library/logging.html#logrecord-attributes

 

logging — Logging facility for Python

Source code: Lib/logging/__init__.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutor...

docs.python.org


References

https://docs.python.org/3/library/logging.html#module-logging

 

logging — Logging facility for Python

Source code: Lib/logging/__init__.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutor...

docs.python.org

https://docs.python.org/3/library/logging.html?highlight=logging#module-logging

 

logging — Logging facility for Python

Source code: Lib/logging/__init__.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutor...

docs.python.org

https://hwangheek.github.io/2019/python-logging/

 

조금 더 체계적인 Python Logging

IntroductionPython으로 코드를 짤 때, 로그를 띄우는 방법으로 print('[*] Message')를 정말 많이 써 왔습니다. 군더더기 없고, 유연하고, dependency 없이 아무 위치에나 넣을 수 있다는 점이 좋았습니다. ‘

hwangheek.github.io