🐡

【検知】自動チェック:WARN・FATAL・ERROR を見逃さないためには

に公開

前書き

QAエンジニアとしてテストを実行する際、テストケースの合否だけでなく、ログに現れる「微細な違和感」まで目を配る力*が求められます。
特に WARN や ERROR、FATAL といった重大度の高いログ出力に早期に気づくことは、システムの異常予兆を見逃さないために極めて重要です。
なぜなら、テストが形式上「パス」していたとしても、ログには将来的な障害の兆候となる警告(WARN)が出ているケースが少なくないからです。
こうしたログの兆候を見落とせば、後続工程や本番環境で問題が表面化するリスクが高まります。

💡 1 検証ごとにログをチェックできたら安心

たとえば UI テストや API テストのあとに、対象ディレクトリ内の *.log ファイルをスキャンして「WARN」や「FATAL」、「ERROR」がないかを自動で確認できたら、安心感がかなり増しますよね。

  • 手作業で .log を毎回開くのは現実的じゃない
  • でも放置すると不具合の予兆を見逃すかもしれない

そんなときに役立つ、**「特定ディレクトリ内のログをチェックする簡単なスクリプト」**を紹介します!

import os
import sys

# 検索対象となるキーワード
KEYWORDS = ["WARN", "FATAL", "ERROER"]

def notify(message):
    # OSごとに通知方法を切り替え
    if sys.platform.startswith("win"):
        try:
            import ctypes
            # Windowsの場合はポップアップで通知
            ctypes.windll.user32.MessageBoxW(0, message, "Log Alert", 1)
        except Exception:
            # 失敗した場合は標準出力
            print(f"[ALERT] {message}")
    else:
        # Linux/macOSの場合は標準出力で通知
        print(f"[ALERT] {message}")

def scan_logs(directory):
    # 指定ディレクトリ以下を再帰的に探索
    for root, _, files in os.walk(directory):
        for file in files:
            # .logファイルのみ対象
            if file.endswith(".log"):
                path = os.path.join(root, file)
                # ファイルを開いて1行ずつ確認
                with open(path, encoding="utf-8", errors="ignore") as f:
                    for i, line in enumerate(f, 1):
                        for kw in KEYWORDS:
                            # キーワードが含まれていれば通知
                            if kw in line:
                                notify(f"{path} ({i}行目): {line.strip()}")

if __name__ == "__main__":
    # コマンドライン引数でディレクトリ指定、なければカレントディレクトリ
    target_dir = sys.argv[1] if len(sys.argv) > 1 else "."
    scan_logs(target_dir)

alert.py 確認したいフォルダパス

📕 補足

あえて特定の文字列(WARNなど)が出力された瞬間に通知する機能にはしていない。
検索の処理を回し続けると負荷テストなどで性能に影響を与える可能性があるため

Discussion