ken_nogi/PythonProj/ScanOCR/スクリプト/logger.py
Kenichiro NOGI ce6f25f656 fix: ログ改行混入対策とrun_queue内未処理例外の安全終了を追加
コードレビュー指摘対応。
- ログ備考欄に改行(スタックトレース等)が混入すると1行フォーマットが崩れるため、改行を空白に平坦化
- run_queue内でファイルコピー・移動が例外を投げた場合に未処理例外でクラッシュしていた問題を修正。main()側でrun_queue呼び出しをtry/exceptし、ログ記録の上でロックを解放して安全終了する

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 10:24:40 +09:00

38 lines
1.1 KiB
Python

# -*- coding: utf-8 -*-
"""実行ログ出力モジュール。日付別ファイル・UTF-8 BOM付き。"""
from __future__ import annotations
from datetime import datetime
from pathlib import Path
from typing import Callable
LOG_ENCODING = "utf-8-sig"
def log_path_for_today(
log_dir: Path, now_func: Callable[[], datetime] = datetime.now
) -> Path:
return log_dir / f"{now_func().strftime('%Y-%m-%d')}.log"
def append_log(
log_dir: Path,
result: str,
original_filename: str,
name: str | None,
date: str | None,
note: str = "",
now_func: Callable[[], datetime] = datetime.now,
) -> None:
log_dir.mkdir(parents=True, exist_ok=True)
now = now_func()
flat_note = note.replace("\r\n", " ").replace("\n", " ").replace("\r", " ")
line = (
f"[{now.strftime('%Y-%m-%d %H:%M:%S')}] "
f"結果={result} | 元ファイル={original_filename} | "
f"氏名={name or ''} | 日付={date or ''} | 備考={flat_note}\n"
)
path = log_path_for_today(log_dir, now_func)
with open(path, "a", encoding=LOG_ENCODING) as f:
f.write(line)