일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 깃
- github
- Java
- 코테
- 데이터베이스
- 쿠버네티스
- 머신러닝
- 프로그래머스
- LV 0
- db
- mysql
- ubuntu
- git
- 정처기
- 우분투
- Kubernetes
- Python
- 파이썬
- 리눅스
- 자료구조
- 코딩테스트
- 자바
- DevOps
- Linux
- programmers
- 알고리즘
- Ai
- 인공지능
- Lv 2
- docker
- Today
- Total
Myo-Kyeong Tech Blog
[Python] print 대신 logging을 사용하는 이유 및 사용법 본문
python 개발을 하다보면 코드의 흐름을 확인하거나 오류를 추적하기 위해 print
를 많이 사용하게 됩니다. 하지만 더 조금 더 복잡한 애플리케이션을 개발하거나, 운영 환경에서 문제를 모니터링하려면 print
대신 logging
모듈을 사용하는 것을 더 권장합니다.
왜 print 대신 logging을 사용해야 할까?
print
는 단순한 디버깅에는 유용할 수 있지만, 큰 애플리케이션이나 운영 환경에서는 logging이 더 유리한 점이 많습니다.
1. 로그 레벨을 통한 중요도 구분
logging 모듈은 메시지의 중요도에 따라 로그 레벨을 제공하여, 상황에 맞게 로그를 분류할 수 있게 해줍니다.
DEBUG | 개발 시 디버깅을 위해 사용하는 가장 낮은 수준의 로그 |
INFO | 일반적인 정보 메시지로, 정상적인 실행 과정을 기록 |
WARNING | 경고 메시지로, 애플리케이션이 계속 실행되지만 주의가 필요한 상황을 기록 |
ERROR | 오류 메시지로, 실행 중 문제가 발생했을 때 기록 |
CRITICAL | 치명적인 오류로, 즉시 조치가 필요한 상황을 기록 |
이처럼 로그 레벨을 사용하면 DEBUG와 같은 상세 로그는 개발 환경에서만 출력하고, 운영 환경에서는 ERROR 이상만 출력하도록 설정할 수 있습니다.
2. 출력 위치와 포멧 유연하게 설정 가능
logging을 사용하면 로그를 콘솔뿐 아니라 파일, 네트워크, 원격 서버 등 다양한 곳으로 보낼 수 있습니다. 또한 로그 메시지의 형식을 자유롭게 설정할 수 있어, 시간, 로그 레벨, 파일명 등을 포함한 상세한 정보를 남길 수 있습니다.
예를 들어, 다음과 같이 시간과 로그 레벨을 포함한 로그를 파일에 저장할 수 있습니다.
import logging
logging.basicConfig(filename='app.log', level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('This is an informational message.')
3. 로그 파일 관리와 자동 회전
운영 환경에서는 로그 파일이 매우 커질 수 있기 때문에 로그 파일을 관리하는 기능이 필요합니다. logging 모듈은 파일 크기나 시간에 따라 자동으로 로그 파일을 교체하거나 백업하는 기능을 제공합니다. 예를 들어, RotatingFileHandler와 TimedRotatingFileHandler를 사용하면 특정 크기 이상이 되거나 일정 시간이 지나면 로그 파일을 회전할 수 있습니다.
Python logging 모듈 사용법
기본 설정
logging.basicConfig를 사용해 기본적인 로그 설정을 할 수 있습니다. 아래는 로그 레벨을 INFO 이상으로 설정하고, 메시지에 시간과 로그 레벨을 포함하는 예제입니다.
import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('Application started')
logging.warning('This is a warning message')
logging.error('This is an error message')
이 코드에서는 INFO 이상의 메시지가 다음과 같은 형식으로 출력됩니다.
2024-11-05 12:34:56 - INFO - Application started
2024-11-05 12:34:56 - WARNING - This is a warning message
2024-11-05 12:34:56 - ERROR - This is an error message
로그를 파일로 저장하기
filename 매개변수를 지정하면 로그를 파일에 저장할 수 있습니다.
logging.basicConfig(filename='app.log', level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s')
logging.info('Logging to a file')
이제 모든 로그가 app.log 파일에 저장되며 애플리케이션의 실행 이력을 저장하는 데 유용합니다.
여러 핸들러 사용하기
logging 모듈의 장점 중 하나는 여러 핸들러를 사용해 로그를 다양한 곳으로 보낼 수 있다는 것입니다. 예를 들어, 콘솔과 파일에 동시에 로그를 남기려면 다음과 같이 설정할 수 있습니다.
import logging
# 로거 생성
logger = logging.getLogger('my_logger')
# 파일 핸들러
file_handler = logging.FileHandler('app.log')
file_handler.setLevel(logging.ERROR)
# 콘솔 핸들러
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
# 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 로거에 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)
# 테스트 메시지
logger.debug('Debug message')
logger.error('Error message')
DEBUG 메시지는 콘솔에만 출력되고, ERROR 메시지는 파일과 콘솔 모두에 출력됩니다.
REFERENCE
'Programming > Python' 카테고리의 다른 글
[Python] 파이썬 코드 디버깅을 위한 PDB 사용 방법 (0) | 2024.03.18 |
---|---|
[Python] 우선순위 큐 (Priority Queue) 개념 정리 및 예제 (0) | 2023.07.15 |
[ Python ] python 문자열 메소드 - 다른 문자열 교체 replace() (0) | 2023.06.03 |
[ Python ] Lambda 함수를 활용한 리스트 정렬 (0) | 2023.06.01 |