[목표]
loguru을 사용하여 다양한 로그 레벨로 메시지를 기록하고, 로그 파일로 저장하여 ETL 작업 추적schedule을 사용하여 주기적으로 실행해야 하는 작업을 예약하고 자동화PyYAML을 사용하여 YAML 파일을 읽고 쓰며, 애플리케이션 설정을 관리로깅은 애플리케이션에서 발생하는 다양한 이벤트를 추적하는 중요한 도구입니다. 코드의 실행 시간, 실행한 위치, 오류 발생 지점 등을 기록함으로써 디버깅을 더 쉽게 할 수 있습니다.
이번 강의에서는 loguru 라이브러리를 활용하여 로그 레벨별로 로그를 기록하는 방법을 배워보겠습니다. 아래는 로그 심각도 수준에 따른 순서입니다.
(TRACE < DEBUG < INFO < WARNING < ERROR < CRITICAL)
먼저 필요한 패키지를 설치하겠습니다
pip install loguru
01-1. 기본 사용법
from loguru import logger # 로그 레벨별 메시지 출력 logger.debug("디버그 메시지입니다.") # 디버깅 메시지 logger.info("정보 메시지입니다.") # 일반적인 정보 메시지 logger.warning("경고 메시지입니다.") # 경고 메시지 logger.error("에러 메시지입니다.") # 에러 메시지 logger.critical("심각한 에러 메시지입니다.") # 심각한 에러 메시지
01-2. 로그 파일에 기록하기
from datetime import datetime
# 로그 파일 이름 생성
current_datetime = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
log_filename = f"etl_process_{current_datetime}.log"
# 로그를 파일로 기록
logger.add(log_filename)
# 로그 메시지 출력
logger.info("정보 메시지입니다.")
01-3. 로그 레벨 설정
모든 로그를 저장 할 필요는 없습니다. level="WARNING"로 설정하면 WARNING 이상의 중요도를 가진 로그만 기록됩니다.
# WARNING 이상의 로그만 기록 logger.add("logfile_level.log", level="WARNING") logger.debug("디버그 메시지입니다.") # 기록되지 않음 logger.warning("경고 메시지입니다.") # 기록됨
01-4. 로그의 출력 형식 설정
로그의 출력형식을 변경 할 수 있습니다. 예를 들어, 시간에서 milisecond 단위를 제거하고 level 이랑 message 만 포함 할 수 있게 파일에 출력하겠습니다.
logger.add("logfile_format.log", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}") logger.info("정보 메시지")
01-5. 기타 파라미터
rotation: 로그 파일 회전 (로그 파일 크기나 시간 기준으로 회전)retention: 오래된 로그 파일 삭제compression: 로그 파일 압축[참고 블로그 - loguru를 사용하여 python 로깅 쉽게하기]
schedule 라이브러리를 사용하여 주기적인 작업을 설정하고 관리하는 방법을 알아보겠습니다.
먼저 필요한 패키지를 설치하겠습니다
pip install schedule
02-1. 기본 사용법
job() 함수가 1초마다 실행되도록 설정합니다. schedule.every()를 사용하여 주기적으로 실행할 시간을 설정하고, do()를 통해 실행할 작업을 지정합니다. schedule.run_pending() 을 통해 설정한 스케줄을 실행합니다. import schedule
import time
# 실행할 함수 정의
def job():
print("작업이 실행되었습니다!")
# 1초마다 작업 실행
schedule.every(1).seconds.do(job)
# 스케줄러 실행
while True:
schedule.run_pending() # 예약된 작업이 있으면 실행
time.sleep(1) # 1초마다 체크
02-2. 다양한 주기 설정
이외 다양한 방법으로 스케줄 주기를 설정할 수 있습니다.
# 10초마다 실행
schedule.every(10).seconds.do(job)
# 1분마다 실행
schedule.every(1).minute.do(job)
# 매일 자정에 실행
schedule.every().day.at("00:00").do(job)
# 매주 월요일 9시에 실행
schedule.every().monday.at("09:00").do(job)
🤨 .env 파일과의 차이점
.env 파일은 주로 애플리케이션의 환경 변수를 저장하는 데 사용됩니다. 예를 들어, 데이터베이스 연결 정보나 API 키와 같은 비밀 정보를 관리할 때 유용합니다.YAML 파일은 애플리케이션의 구성 정보를 저장하는 데 사용됩니다. 예를 들어, 데이터 파이프라인 일정, 로그 출력 위치 등을 계층적인 형태로 정의할 수 있습니다..env 파일은 주로 환경 변수나 민감한 정보를 저장하는 데 사용되고, YAML은 자동화 부분의 설정이나 구성을 관리하는 데 적합합니다.먼저 필요한 패키지를 설치하겠습니다.
pip install pyyaml
03-1. YAML 파일 작성 (config.yaml)
log_folder_path: "./etl_module/logs"
cities:
- "New York"
- "Los Angeles"
- "Chicago"
- "Houston"
- "Phoenix"
run_minutes: 5
03-2. YAML 파일 읽기
import yaml
# YAML 파일 경로
yaml_file_path = 'config.yaml'
# YAML 파일을 읽어 Python 객체로 변환
with open(yaml_file_path, 'r') as yaml_file:
config = yaml.safe_load(yaml_file)
# 읽은 데이터 출력
print(config.get('log_folder_path')) # 로그 폴더 경로 출력
print(config.get('cities')) # 도시 목록 출력