진행상태, 유니크로그 저장방식 추가
This commit is contained in:
@@ -13,21 +13,38 @@ from dotenv import load_dotenv
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def setup_logger():
|
||||
"""로거를 설정하여 콘솔과 파일에 모두 출력하도록 합니다."""
|
||||
logger.setLevel(logging.INFO) # 로거의 최소 레벨 설정
|
||||
"""
|
||||
로거를 설정하여 콘솔과 고유한 타임스탬프를 가진 파일에 모두 출력하도록 합니다.
|
||||
로그 파일은 'workspace' 디렉터리 내에 저장됩니다.
|
||||
"""
|
||||
# 기존에 추가된 핸들러가 있다면 제거하여 중복 로깅 방지
|
||||
for handler in logger.handlers[:]:
|
||||
logger.removeHandler(handler)
|
||||
|
||||
# 로그 포맷 지정
|
||||
logger.setLevel(logging.INFO)
|
||||
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
|
||||
|
||||
# 콘솔 핸들러 설정
|
||||
# 콘솔 핸들러
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setFormatter(formatter)
|
||||
logger.addHandler(console_handler)
|
||||
|
||||
# 파일 핸들러 설정 (예: 'script_run.log' 파일에 저장)
|
||||
file_handler = logging.FileHandler('script_run.log', encoding='utf-8')
|
||||
# 고유한 파일명을 위한 타임스탬프 생성
|
||||
timestamp = time.strftime("%Y%m%d_%H%M%S")
|
||||
log_filename = f"{timestamp}_script_run.log"
|
||||
|
||||
# 로그 파일을 workspace 디렉터리 안에 생성
|
||||
workspace_dir = os.path.dirname(__file__)
|
||||
log_filepath = os.path.join(workspace_dir, log_filename)
|
||||
|
||||
# 파일 핸들러
|
||||
file_handler = logging.FileHandler(log_filepath, encoding='utf-8')
|
||||
file_handler.setFormatter(formatter)
|
||||
logger.addHandler(file_handler)
|
||||
|
||||
# 생성된 로그 파일 경로를 로깅
|
||||
logger.info(f"로그 파일이 '{log_filepath}'에 생성되었습니다.")
|
||||
|
||||
|
||||
# --- API 요청 함수 ---
|
||||
|
||||
@@ -45,7 +62,6 @@ def start_extraction(post_url, file_path, filename, headers, model_name=None):
|
||||
|
||||
return response.json()
|
||||
except Exception:
|
||||
# logger.exception은 오류의 상세 정보(traceback)까지 기록해줍니다.
|
||||
logger.exception(f"[{filename}] POST 요청 중 오류 발생")
|
||||
return None
|
||||
|
||||
@@ -100,7 +116,7 @@ def main():
|
||||
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
|
||||
load_dotenv(dotenv_path=dotenv_path)
|
||||
|
||||
# 로거를 가장 먼저 설정합니다.
|
||||
# 로거를 가장 먼저 설정
|
||||
setup_logger()
|
||||
|
||||
# 환경 변수에서 API 정보 가져오기
|
||||
@@ -132,13 +148,16 @@ def main():
|
||||
logger.info(f"요청 API: {post_url}")
|
||||
logger.info(f"입력 디렉터리: {args.input_dir}")
|
||||
logger.info(f"출력 디렉터리: {args.output_dir}")
|
||||
|
||||
for filename in sorted(os.listdir(args.input_dir)):
|
||||
file_path = os.path.join(args.input_dir, filename)
|
||||
if not os.path.isfile(file_path):
|
||||
continue
|
||||
|
||||
logger.info(f"--- 처리 시작: {filename} ---")
|
||||
# 처리할 파일 목록 준비
|
||||
files_to_process = [f for f in sorted(os.listdir(args.input_dir)) if os.path.isfile(os.path.join(args.input_dir, f))]
|
||||
total_files = len(files_to_process)
|
||||
logger.info(f"총 {total_files}개의 파일을 처리합니다.")
|
||||
|
||||
for i, filename in enumerate(files_to_process):
|
||||
file_path = os.path.join(args.input_dir, filename)
|
||||
|
||||
logger.info(f"--- ({i+1}/{total_files}) 처리 시작: {filename} ---")
|
||||
|
||||
initial_response = start_extraction(post_url, file_path, filename, headers, args.model_name)
|
||||
if not initial_response:
|
||||
@@ -173,5 +192,4 @@ if __name__ == "__main__":
|
||||
try:
|
||||
main()
|
||||
except KeyboardInterrupt:
|
||||
# KeyboardInterrupt는 main 밖에서 처리해야 할 수 있으므로 로거를 직접 호출
|
||||
logging.getLogger(__name__).warning("사용자에 의해 작업이 중단되었습니다.")
|
||||
logging.getLogger(__name__).warning("사용자에 의해 작업이 중단되었습니다.")
|
||||
Reference in New Issue
Block a user