丸太を探すのにうんざりしていませんか?プロセス全体を自動化する方法は次のとおりです

in tech

Web アプリケーションをデバッグしたことがある場合は、おそらく自分が認めたい以上にデバッグを行ったことがあるでしょう。エラーがポップアップ表示されます。ログをスクロールします。重要なものが見つかります。その一部をコピーします。次に、それをどこかに貼り付けます。おそらくチームメイトとのチャット、おそらくドキュメント、あるいはますます、内容を理解するのに役立つ AI ツールに使用されます。

私もあなたの立場でしたが、ある時点で、これはやめるべきだと感じました。そこで、私はこの手動ログ処理に対処するソリューションを慎重に作成しました。

ログを解析するための自動化システムの作成

スクリプトに手動ワークフローを処理させる

Home Assistant CAFE オートメーション フローチャート エディターの統合。 クレジット: Tim Brookes / How-To Geek

ログはすでに構造化されたテキストです。小さなスクリプトを使用すれば、重要な部分だけを取り出して整理し、読みやすい形式に自動的に整形することができました。アイデアはシンプルでした。私が手動で繰り返していたワークフローそのものを、単一のコマンドで実行できるものに変換するというものです。再利用可能なスクリプト。

このアイデアをテストするために、ランダムにエラーをスローしてログ ファイルに書き込む小さなデモ Web アプリを使用しました。フォローしたい場合は、コードを GitHub にアップしました。ただし、この正確な設定は必要ありません。ログをファイルに書き込むアプリケーションはすべて同じように動作します。現時点で問題となるのは、有用なエラーとその周囲のノイズが混在して増大するログ ファイルだけです。

毎回手動でログを調べる代わりに、退屈な部分を実行するための小さくてスマートな Python スクリプトを作成しました。考え方は簡単です。ログ ファイルを読み取り、エラー セクションだけを取り出してクリーンアップし、どこでも使用できる Markdown ファイルに保存します。スクリプトの最小バージョンは次のとおりです。

from datetime import datetime

LOG_FILE = "app.log"


def is_new_log_entry(line):
    return any(level in line for level in ("INFO", "WARNING", "DEBUG", "ERROR"))


def extract_errors(lines):
    errors = ()
    current_error = ()
    capturing = False

    for line in lines:
        if "ERROR" in line:
            if current_error:
                errors.append("".join(current_error))
                current_error = ()
            capturing = True

        elif capturing and is_new_log_entry(line):
            errors.append("".join(current_error))
            current_error = ()
            capturing = False

        if capturing:
            current_error.append(line)

    if current_error:
        errors.append("".join(current_error))

    return errors


def format_markdown(errors):
    formatted = ()

    for i, error in enumerate(errors, 1):
        block = f"### Error 関連情報は以下のリンクからご確認いただけます\n```\n公式情報はこちら\n```"
        formatted.append(block)

    return "\n".join(formatted)


def save_report(content):
    timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M")
    filename = f"error_report_関連情報は以下のリンクからご確認いただけます.md"

    with open(filename, "w") as f:
        f.write("# Error Report\n")
        f.write(content)

    print(f"Saved: 詳しい情報を見る")


def main():
    with open(LOG_FILE, "r") as f:
        lines = f.readlines()

    errors = extract_errors(lines)

    if not errors:
        print("No errors found.")
        return

    report = format_markdown(errors)
    save_report(report)


if __name__ == "__main__":
    main()

ここでは 4 つの小さなステップが発生します。

  1. ログ ファイルを読み取ります。 スクリプトは、ログ ファイルを行のリストとしてメモリにロードします。これにより、大きなテキストの塊を処理するのではなく、一度に 1 ステップずつログを処理することが容易になります。
  2. エラー ログのみを抽出します。 行に「ERROR」が含まれる場合、スクリプトはそれを新しいエラー ブロックの始まりとして扱います。その時点から、完全なトレースバックを含む、そのエラーに属するすべての行の収集が開始されます。
  3. 完全なエラー ブロックをキャプチャします。 エラーの終了場所を推測する代わりに、スクリプトは新しいログ エントリ (「INFO」や別の「ERROR」など) の先頭に達するまで行を収集し続けます。これにより、何も切り取られることなくスタック トレース全体を取得できます。
  4. 出力をフォーマットします。 各エラーはクリーンな Markdown ブロックにラップされているため、読み取り、共有、他のツールへの貼り付けが簡単になります。
  5. タイムスタンプを付けて保存します。 最後に、スクリプトはタイムスタンプ付きの名前を持つ新しいファイルにすべてを書き込むため、以前のレポートは上書きされません。
error_report_2026-04-16_14-32.md
青と黄色の背景に Python と Microsoft Excel の 3D ロゴが並んでいます。

Excel の Python はプログラマーだけのものではありません – Python を使って今すぐできる 4 つの便利な機能

Excel を、データセットのクリーニング、日付の標準化、クラスターの視覚化、キーワードの分析のための軽量のデータ サイエンス ツールに変えます。

結果

スクリプトを実行するとワークフローがどのように見えるか

エラー エンドポイントに数回到達した後、生のログ ファイル (app.log) は次のようになりました。

2026-04-17 19:57:58,880 - INFO - Root endpoint was called
2026-04-17 19:58:17,147 - INFO - Root endpoint was called
2026-04-17 19:58:32,806 - INFO - Root endpoint was called
2026-04-17 19:58:42,878 - INFO - Error endpoint was called
2026-04-17 19:58:42,878 - ERROR - Exception occurred in /error endpoint
Traceback (most recent call last):
  File ".../main.py", line 28, in trigger_error
    result = 10 / 0
ZeroDivisionError: division by zero
2026-04-17 19:58:56,878 - INFO - Root endpoint was called
2026-04-17 19:58:59,833 - INFO - Root endpoint was called
2026-04-17 19:59:02,997 - INFO - Error endpoint was called
2026-04-17 19:59:02,997 - ERROR - Exception occurred in /error endpoint
Traceback (most recent call last):
  File ".../main.py", line 28, in trigger_error
    result = 10 / 0
ZeroDivisionError: division by zero
...
Web アプリケーションからのさまざまな種類のログを示すログ ファイル。

これには、成功したリクエスト、繰り返されるノイズ、そしてそれらの間に埋もれた実際のエラーなど、あらゆるものが混在しています。スクリプトを実行すると、きれいな Markdown レポートが得られました。

# Error Report

### Error 1

```
2026-04-17 19:58:42,878 - ERROR - Exception occurred in /error endpoint
Traceback (most recent call last):
  File "D:\Content Writing\How-To Geek\automate logs\demo-webapp-error\main.py", line 28, in trigger_error
    result = 10 / 0
             ~~~^~~
ZeroDivisionError: division by zero
```
...
ログ ファイルからキャプチャおよびクリーンアップされた構造化エラー出力を含むクリーンな Markdown ファイル。

各エラーは分離され、完全であり、読みやすく共有しやすい方法ですでにフォーマットされています。

このスクリプトを使用して、Slack、LLM、またはこのログをコピーして貼り付けるその他のサービスを統合することで、自動化を次のレベルに進めることができます。こうすることで、ログは希望する場所に自動的に到達します。

緑の背景に浮遊する Bash スクリプト コード スニペットとアイコンに囲まれた、白いキーボードを入力する手。

よくあるスクリプトの問題を解決する 18 の Bash 文字列トリック

これらの賢いテクニックを使用して、Bash 文字列のパワーを解き放ちます。


自動化で窮地を救える

これは楽しい実験でしたが、スクリプトと自動化に対する私の見方が変わりました。このようなシンプルだが便利な Python スクリプトのおかげで、何時間もの頭の痛い作業と手作業を節約することができました。

apple mac mini 2024 with m4 pro

ブランド

りんご

オペレーティング·システム

macOS


このテーマについてさらに詳しく知りたい方は以下をご覧ください

公式情報はこちら

関連記事

前の投稿
今週 (4 月 27 日から 5 月 3 日まで) 見るべき注目の Prime Video 映画 5 本
次の投稿
ついに Excel のタイムスタンプを自動化し、最大のデータ信頼性の問題を解決しました