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 …

