포스트

python 프로그램 로그 저장(기본적인 방법 3가지)

파이썬 실행 중에 터미널에 출력되는 모든 로그(표준 출력 및 표준 오류)를 파일로 저장하는 간단한 방법이 3가지 있습니다.

1. 기본적인 로그 저장 방법 (sys.stdout 리다이렉트)

가장 쉬운 방법은 sys.stdout과 sys.stderr을 리다이렉트하는 것입니다.

이 방법의 가장 큰 장점은 모든 print()와 오류 메시지가 output.log 파일에 저장되는 점입니다.

따라서 코드 상에서 print()문을 다른 것으로 대체할 필요가 없습니다.

하지만 이 방법은 파일로 저장되는 대신 터미널에는 아무것도 출력되지 않습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys

# 로그 파일을 생성하여 출력 저장
log_file = open("output.log", "w", encoding="utf-8")

# 표준 출력 및 오류를 파일로 리디렉션
sys.stderr = log_file  # 오류 메시지도 저장

# 테스트 출력
print("이것은 터미널과 파일에 동시에 출력됩니다.")
raise ValueError("예제 오류 발생")  # 오류도 `output.log`에 저장됨

# 실행이 끝나면 파일 닫기
log_file.close()

2. 터미널과 파일에 동시에 출력 (logging 사용)

파일에도 저장하면서 터미널에도 출력하려면 logging 모듈을 사용하면 됩니다.

이 방법을 쓰면 터미널과 output.log 파일에 동시에 저장됩니다.

또한 logging.info(), logging.error(), logging.exception() 등을 사용하여 다양한 로그 레벨 관리 가능하고,

자동으로 타임스탬프(%(asctime)s)를 포함하여 로그를 관리하기 편리합니다.

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
import logging
import sys

# 로그 파일 설정
log_file = "output.log"

# 로거 설정
logging.basicConfig(
    level=logging.INFO,  # 로그 레벨 (INFO 이상)
    format="%(asctime)s - %(levelname)s - %(message)s",
    handlers=[
        logging.FileHandler(log_file, encoding="utf-8"),  # 파일 저장
        logging.StreamHandler(sys.stdout)  # 터미널에도 출력
    ]
)

# 로그 기록 테스트
logging.info("이것은 터미널과 파일에 동시에 저장됩니다.")
logging.error("오류 메시지도 저장됩니다.")

# 예제 예외 처리
try:
    1 / 0
except ZeroDivisionError:
    logging.exception("0으로 나누는 오류 발생!")  # 예외 정보 포함

3. subprocess를 이용해 실행 명령어의 출력 저장

또 다른 방법으로 subprocess를 사용할 수도 있습니다.

사용할 수 있는 조건이 있는데, 외부 실행 파일(your_script.py)을 실행할 때에만 출력을 자동으로 저장합니다.

저장되는 내용은 print()뿐만 아니라 오류 출력까지 모두 포함합니다.

하지만 이 방법도 1번 방법과 마찬가지로 파일로 저장되는 대신 터미널에는 아무것도 출력되지 않습니다.

1
2
3
4
5
6
import subprocess

with open("output.log", "w", encoding="utf-8") as log_file:
    process = subprocess.Popen(["python", "your_script.py"], stdout=log_file, stderr=log_file)
    process.wait()


정리해보겠습니다.

» 결론

방법터미널 출력로그 파일 저장사용 용도
sys.stdout 리다이렉트❌ (안 보임)✅ 저장됨모든 출력 캡처 (터미널 X)
logging 모듈 📌✅ (보임)✅ 저장됨터미널 & 파일 동시 기록
subprocess❌ (안 보임)✅ 저장됨외부 실행 로그 저장 (터미널 X)

단순 로그를 파일에만 저장: sys.stdout = log_file

외부 실행 파일의 로그를 파일에만 저장: subprocess.Popen()

📌(추천) 터미널 & 파일 동시 저장: logging 모듈 사용

제가 만든 커스텀 로깅 모듈을 보시려면 다음 포스팅을 참조해주세요

(라이트 버전) https://blog.naver.com/devramyun/223749590587

[20250206] python 프로그램 커스텀 로깅 클래스 만들기 자세한 로깅 관련 내용은 이전 포스팅을 참조해주세요. https://blog.naver.com/devramyun/223749582224 위… 자세한 로깅 관련 내용은 이전 포스팅을 참조해주세요. https://blog.naver.com/devramyun/223749582224 위…

(디테일 버전) https://blog.naver.com/devramyun/223749702537

[20250206] python 프로그램 커스텀 로깅 클래스 만들기(디테일 버전) python 디폴트 로거 관련 포스팅은 다음을 참조해주세요. https://blog.naver.com/devramyun/223749582224 … python 디폴트 로거 관련 포스팅은 다음을 참조해주세요. https://blog.naver.com/devramyun/223749582224 …

sticker

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.