본문으로 건너뛰기

교육 ·

비전공자 파이썬 로그 관리 배우는 법, print만으론 안 되나요

직접 만든 자동화 스크립트가 새벽에 혼자 돌아가다가 조용히 멈춰버린 경험이 있으신가요. 다음 날 출근해서 왜 안 됐는지 확인하려 해도 남은 건 아무것도 없어서, 처음부터 다시 실행해 보는 것 말고는 방법이 없었던 경우가 많을 것입니다. 비전공자 파이썬 로그 관리를 배워야 하는 이유가 바로 여기에 있습니다.

파이썬으로 엑셀 취합이나 PDF 정리 같은 반복 업무를 자동화하다 보면, 처음에는 print() 문 하나로 충분하다고 느껴집니다. 코드가 잘 도는지 눈으로 확인만 하면 되니까요. 하지만 스크립트를 예약 실행으로 돌리거나 다른 사람에게 넘기는 순간, print문은 아무 역할도 하지 못합니다. 화면을 보는 사람이 없기 때문입니다.

print문 대신 로그를 써야 하는 이유가 뭔가요

print문은 프로그램이 실행되는 동안 화면에만 잠깐 나타났다 사라집니다. 반면 로그는 파일로 남기 때문에 스크립트가 언제, 어떤 단계에서, 무슨 이유로 멈췄는지 나중에 확인할 수 있습니다. 특히 윈도우 작업 스케줄러로 예약 실행하는 자동화 스크립트라면 로그 없이는 문제 원인을 추적할 방법이 사실상 없습니다.

실무에서 흔히 겪는 상황

매일 밤 11시에 자동으로 실행되는 엑셀 취합 스크립트가 있다고 가정해 보겠습니다. 어느 날 담당자가 출근해 보니 취합 파일이 갱신되지 않았습니다. 원인을 확인하려면 다음 세 가지 중 하나가 필요합니다.

  • 어제 밤 11시에 스크립트가 실행되긴 했는지
  • 실행됐다면 어느 파일을 처리하다 멈췄는지
  • 어떤 에러가 발생했는지

print문만 썼다면 이 세 가지 정보는 이미 사라지고 없습니다. 로그 파일을 남겨두었다면 텍스트 파일 하나만 열어봐도 답이 나옵니다.

logging 모듈 기본 사용법

파이썬은 표준 라이브러리에 logging 모듈을 기본으로 포함하고 있어서 별도 설치 없이 바로 쓸 수 있습니다. 가장 기본적인 형태는 다음과 같습니다.

import logging

logging.basicConfig(
    filename="automation.log",
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    encoding="utf-8"
)

logging.info("스크립트 시작")

try:
    # 실제 자동화 작업
    file_count = 5
    logging.info(f"처리 대상 파일 {file_count}개 확인")
except Exception as e:
    logging.error(f"오류 발생: {e}")

logging.info("스크립트 종료")

이 코드를 실행하면 automation.log 파일에 다음과 같은 내용이 시간과 함께 쌓입니다.

2026-08-14 09:00:01 [INFO] 스크립트 시작
2026-08-14 09:00:01 [INFO] 처리 대상 파일 5개 확인
2026-08-14 09:00:03 [INFO] 스크립트 종료

로그 레벨은 왜 나눠서 써야 하나요

로그 레벨은 메시지의 중요도를 구분하는 표시입니다. 상황에 안 맞는 레벨을 계속 쓰면 나중에 정말 중요한 에러가 수많은 로그 속에 묻혀버릴 수 있습니다. 실무에서는 크게 네 단계만 구분해도 충분합니다.

  • INFO: 정상적으로 진행되는 단계 기록 (예: “파일 3개 처리 완료”)
  • WARNING: 문제는 아니지만 확인이 필요한 상황 (예: “예상보다 파일 수가 적음”)
  • ERROR: 특정 작업이 실패했지만 스크립트는 계속 진행 가능
  • CRITICAL: 스크립트 전체를 멈춰야 하는 심각한 문제

비전공자를 위한 예외처리(try-except) 문법과 로그를 함께 쓰면 효과가 배가 됩니다. 에러가 나도 스크립트가 멈추지 않게 만들면서, 동시에 어떤 에러가 있었는지 기록으로 남길 수 있기 때문입니다.

import logging

logging.basicConfig(
    filename="automation.log",
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    encoding="utf-8"
)

files = ["1월실적.xlsx", "2월실적.xlsx", "손상된파일.xlsx"]

for f in files:
    try:
        if f == "손상된파일.xlsx":
            raise ValueError("파일 형식이 올바르지 않습니다")
        logging.info(f"{f} 처리 완료")
    except Exception as e:
        logging.error(f"{f} 처리 실패: {e}")

logging.info("전체 작업 종료")

이렇게 하면 하나의 파일에서 에러가 나도 나머지 파일 처리는 계속되고, 어떤 파일에서 무슨 문제가 있었는지는 로그에 정확히 남습니다.

파이썬 로그 관리, 이렇게 시작하세요

로그 파일 관리, 무한정 쌓아두면 되나요

로그 파일을 계속 쌓기만 하면 시간이 지나면서 파일 하나가 지나치게 커지는 문제가 생깁니다. logging.handlersTimedRotatingFileHandler를 쓰면 하루 단위로 로그 파일을 자동으로 나눠서 저장할 수 있습니다.

import logging
from logging.handlers import TimedRotatingFileHandler

logger = logging.getLogger("automation")
logger.setLevel(logging.INFO)

handler = TimedRotatingFileHandler(
    "automation.log", when="midnight", backupCount=30, encoding="utf-8"
)
formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s")
handler.setFormatter(formatter)
logger.addHandler(handler)

logger.info("오늘 작업 시작")

backupCount=30으로 설정하면 최근 30일치 로그만 남기고 오래된 파일은 자동으로 삭제됩니다. 관공서나 중소기업 실무 환경에서는 로그가 너무 오래 쌓이는 것도, 너무 빨리 사라지는 것도 곤란하기 때문에 이렇게 보관 기간을 정해두는 편이 안전합니다.

로그를 남기는 것과 별개로, 자동화 스크립트를 사람이 이어받아 유지보수하려면 로그 파일 자체와는 다른 차원의 문서화도 필요합니다. 이 부분은 자동화 스크립트를 만들고 나서 오래 유지보수하는 로그 작성법에서 다루고 있으니 함께 참고하시면 좋습니다.

로그를 실무에 붙이는 순서

처음부터 완벽한 로그 체계를 만들 필요는 없습니다. 다음 순서로 하나씩 붙여가는 것을 권합니다.

  1. print()logging.info()로 바꾸기
  2. 에러가 날 수 있는 부분에 try-except와 logging.error() 추가하기
  3. 로그 파일이 무한정 커지지 않도록 rotating handler 적용하기
  4. 로그 파일 위치를 공유 폴더로 옮겨 담당자가 언제든 확인할 수 있게 하기

이 네 단계만 거쳐도 스크립트가 왜 멈췄는지 몰라 처음부터 다시 돌리는 상황은 크게 줄어듭니다. 로그는 화려한 기능이 아니라, 자동화를 “믿고 맡길 수 있는 상태”로 만드는 최소한의 안전장치입니다.

파이썬 자동화를 도입한 뒤 정작 운영 단계에서 로그나 예외처리 없이 방치되어 있는 사내 스크립트를 종종 마주하게 됩니다. 픽셀앤코드는 양주 지역 중소기업과 관공서를 대상으로 맞춤형 자동화 개발과 함께, 이미 만들어진 스크립트를 안정적으로 운영할 수 있도록 점검하고 다듬는 교육도 함께 진행하고 있습니다.