반응형
파이썬에서 print 출력을 날짜별로 분리된 파일로 로깅하기 위해서는 로깅(logging) 모듈을 사용하면 됩니다.
로깅 모듈을 사용하면 메시지를 다양한 수준(level)에서 기록할 수 있습니다.
1. 날짜별로 로그 파일을 분리하여 저장하는 방법
TimedRotatingFileHandler를 이용하여 로깅하는 방법도 있지만 여기서는 간단하게
파일명에 날자를 포함하여 저장하는 방법을 사용해서 만들어 보겠습니다.
예를 들어, 2024년 3월 14일에 실행하면 app_2024-03-14.log 파일에 로그가 기록됩니다.
또 다음 날 실행하면 새로운 날짜로 명명된 파일에 로그가 기록되고 기존 파일은 그대로 유지됩니다.
이 방법은 로그 파일이 날짜별로 무한정 생성되기 때문에 주기적인 관리가 필요합니다.
import logging
import os
from datetime import datetime
# 현재 날짜를 포함한 로그 파일 이름 생성
current_date = datetime.now().strftime("%Y-%m-%d")
log_file_name = f"app_{current_date}.log" # 예: app_2024-03-14.log
log_file_path = os.path.join("logs", log_file_name)
# 로그 디렉터리 생성 (디렉터리가 존재하지 않는 경우)
os.makedirs(os.path.dirname(log_file_path), exist_ok=True)
# 로거 설정
logger = logging.getLogger("MyLogger")
logger.setLevel(logging.INFO)
# FileHandler 설정
file_handler = logging.FileHandler(log_file_path)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
# 사용 예
logger.info("프로그램 시작")
logger.info("프로그램 진행중")
logger.error("에러 발생")
이렇게 하면 하위 logs 폴더 아래에 오늘 날자로 파일이 생성되고 로그가 쌓이게 됩니다.
2. 콘솔과 파일에 동시에 출력하기
메시지를 콘솔과 파일에 동시에 출력하는 것도 가능합니다.
메시지를 콘솔과 파일에 동시에 출력하려면, 파이썬의 logging 모듈을 사용하여 로거(logger)에 콘솔 핸들러(ConsoleHandler)와 파일 핸들러(FileHandler)를 모두 추가해야 합니다.
import logging
import os
from datetime import datetime
# 로거 설정
logger = logging.getLogger('MyAppLogger')
logger.setLevel(logging.DEBUG) # DEBUG 레벨 이상의 모든 메시지 기록
# 콘솔 핸들러 설정
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # INFO 레벨 이상의 메시지를 콘솔에 출력
# 파일 핸들러 설정
log_file_name = f"app_{datetime.now().strftime('%Y-%m-%d')}.log"
log_file_path = os.path.join("logs", log_file_name)
os.makedirs(os.path.dirname(log_file_path), exist_ok=True) # 로그 디렉터리 생성
file_handler = logging.FileHandler(log_file_path)
file_handler.setLevel(logging.DEBUG) # DEBUG 레벨 이상의 메시지를 파일에 기록
# 로그 메시지 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 핸들러를 로거에 추가
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 로그 메시지 테스트
logger.debug("디버그 메시지")
logger.info("정보 메시지")
logger.warning("경고 메시지")
logger.error("에러 메시지")
logger.critical("크리티컬 메시지")
이런식으로 콘솔과 파일에 동시에 출력을 확인 할 수 있습니다.
반응형
'IT > 개발' 카테고리의 다른 글
youtube-dl을 사용해서 유투브 컨텐츠를 다운로드 해보자 (0) | 2024.03.20 |
---|---|
youtube 컨텐츠 다운로드 하여 일부분만 저장하기(python, pytube, moviepy) (0) | 2024.03.20 |
파이썬에서 ffmpeg 사용하기(ffmpeg-python, 각종 예제) (0) | 2024.02.21 |
chatGPT-4를 이용한 이미지 해석(Image Description, gpt-4-vision) (0) | 2023.11.28 |
DALLI-E 모델을 이용한 이미지 수정 및 유사이미지 만들기(chatGPT, OpenAI API) (0) | 2023.11.28 |