진행상태, 유니크로그 저장방식 추가
This commit is contained in:
@@ -13,21 +13,38 @@ from dotenv import load_dotenv
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
def setup_logger():
|
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')
|
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
|
||||||
|
|
||||||
# 콘솔 핸들러 설정
|
# 콘솔 핸들러
|
||||||
console_handler = logging.StreamHandler()
|
console_handler = logging.StreamHandler()
|
||||||
console_handler.setFormatter(formatter)
|
console_handler.setFormatter(formatter)
|
||||||
logger.addHandler(console_handler)
|
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)
|
file_handler.setFormatter(formatter)
|
||||||
logger.addHandler(file_handler)
|
logger.addHandler(file_handler)
|
||||||
|
|
||||||
|
# 생성된 로그 파일 경로를 로깅
|
||||||
|
logger.info(f"로그 파일이 '{log_filepath}'에 생성되었습니다.")
|
||||||
|
|
||||||
|
|
||||||
# --- API 요청 함수 ---
|
# --- API 요청 함수 ---
|
||||||
|
|
||||||
@@ -45,7 +62,6 @@ def start_extraction(post_url, file_path, filename, headers, model_name=None):
|
|||||||
|
|
||||||
return response.json()
|
return response.json()
|
||||||
except Exception:
|
except Exception:
|
||||||
# logger.exception은 오류의 상세 정보(traceback)까지 기록해줍니다.
|
|
||||||
logger.exception(f"[{filename}] POST 요청 중 오류 발생")
|
logger.exception(f"[{filename}] POST 요청 중 오류 발생")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@@ -100,7 +116,7 @@ def main():
|
|||||||
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
|
dotenv_path = os.path.join(os.path.dirname(__file__), '.env')
|
||||||
load_dotenv(dotenv_path=dotenv_path)
|
load_dotenv(dotenv_path=dotenv_path)
|
||||||
|
|
||||||
# 로거를 가장 먼저 설정합니다.
|
# 로거를 가장 먼저 설정
|
||||||
setup_logger()
|
setup_logger()
|
||||||
|
|
||||||
# 환경 변수에서 API 정보 가져오기
|
# 환경 변수에서 API 정보 가져오기
|
||||||
@@ -132,13 +148,16 @@ def main():
|
|||||||
logger.info(f"요청 API: {post_url}")
|
logger.info(f"요청 API: {post_url}")
|
||||||
logger.info(f"입력 디렉터리: {args.input_dir}")
|
logger.info(f"입력 디렉터리: {args.input_dir}")
|
||||||
logger.info(f"출력 디렉터리: {args.output_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)
|
initial_response = start_extraction(post_url, file_path, filename, headers, args.model_name)
|
||||||
if not initial_response:
|
if not initial_response:
|
||||||
@@ -173,5 +192,4 @@ if __name__ == "__main__":
|
|||||||
try:
|
try:
|
||||||
main()
|
main()
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
# KeyboardInterrupt는 main 밖에서 처리해야 할 수 있으므로 로거를 직접 호출
|
logging.getLogger(__name__).warning("사용자에 의해 작업이 중단되었습니다.")
|
||||||
logging.getLogger(__name__).warning("사용자에 의해 작업이 중단되었습니다.")
|
|
||||||
Reference in New Issue
Block a user