📖

【ログ作成】Pythonでサンプルログを作成する

に公開

【ログ作成】Pythonでサンプルログを構造的に生成する

はじめに

テストやQA業務、ログ解析ツールの検証などで、ダミーのログファイルが必要になる場面は多いです。
しかし、実際のログは機密情報を含む可能性があり、テストや共有目的では使いにくいことも。

そこで本記事では、Pythonで任意の長さ・形式・件数のログを自動生成するスクリプトを紹介します。


このスクリプトでできること

  • サイズ帯ごとに件数をしたログの生成(1KB~10KBのログは3件などサイズごとに件数指定)
  • タイムスタンプ、IP、優先度、アプリ名、メッセージの構造化された形式のログ生成
  • スペース区切りのプレーンログの作成(CSVではなく、実ログ形式)
  • 1行ごとに独立したログを1ファイルにまとめて出力
  • 1行ごとにタイムスタンプの時間をずらしたログの作成

ログの構造(1行あたり)

以下のような形式でログを出力します:


2025-06-02 16:20:00 192.168.0.10 INFO auth aF84jK3qA...

項目名 内容
timestamp 日時(1秒ずつ増加)
ip ランダム選択されたIPアドレス
priority ログレベル(INFO/WARNなど)
app_name ログ発生元のアプリ名
message 任意サイズのランダム文字列

出力サイズの制御方法

スクリプト内で以下のようにサイズ帯と件数を指定できます:

size_distribution = [
    ((20, 30), 2),
    ((31, 50), 3),
    ((51, 80), 3),
    ((81, 128), 2),
]

これにより、出力されるログの1行ごとの「本文部分の長さ」を柔軟にコントロール可能です。
単位はおおよそ**バイト(文字数)**と考えてOKです。


サンプルコード(lggen.py)

import random
import string
from datetime import datetime, timedelta

# ======== 設定 ========

output_file = "sample_log_zenn.txt"  # 出力ファイル名(テキスト形式)
total_entries = 10                   # 出力件数

# サイズ帯(min, max)と出力件数(合計10件)
size_distribution = [
    ((20, 30), 2),   # 超軽量ログ 2件
    ((31, 50), 3),   # 軽量ログ 3件
    ((51, 80), 3),   # 中軽量ログ 3件
    ((81, 128), 2),  # やや長めログ 2件
]

# ランダム選択に使う値
ip_list = ["192.168.0.10", "10.0.0.1", "172.16.5.23"]
app_names = ["auth", "payment", "core"]
priorities = ["INFO", "WARN", "ERROR"]

# ======== エントリ生成 ========

log_entries = []
for (min_len, max_len), count in size_distribution:
    log_entries += [(min_len, max_len)] * count

start_time = datetime.now()

# ======== ログ出力(スペース区切り) ========

with open(output_file, "w", encoding="utf-8") as f:
    for i, (min_len, max_len) in enumerate(log_entries):
        timestamp = (start_time + timedelta(seconds=i)).strftime("%Y-%m-%d %H:%M:%S")
        ip = random.choice(ip_list)
        priority = random.choice(priorities)
        app = random.choice(app_names)
        msg_len = random.randint(min_len, max_len)
        message = ''.join(random.choices(string.ascii_letters + string.digits, k=msg_len))

        line = f"{timestamp} {ip} {priority} {app} {message}"
        f.write(line + "\n")

print(f"ログ出力完了: {output_file}{len(log_entries)}件)")

--

実行例

$ python loggen.py
ログ出力完了: sample_log_zenn.txt(10件)
$ cat sample_log_zenn.txt 
2025-06-02 20:38:00 172.16.5.23 WARN payment 1nlWJdXK4yV4LTPiJAycaGjeEHG8X
2025-06-02 20:38:01 192.168.0.10 INFO payment R1GITPCDSnOFg1OFtvStq0TZF8rM
2025-06-02 20:38:02 172.16.5.23 WARN payment 4wVgF8IrNMtYQ6TF4NrIAjvuxrA912riN
2025-06-02 20:38:03 10.0.0.1 WARN payment mIL82pqzcNt0RopdtwEjAzuVpvvyKZOybcsNeHCH
2025-06-02 20:38:04 10.0.0.1 ERROR payment 5bAFHgz4FS7XOManhFg1OPzT3Y5aaaF9XjiY
2025-06-02 20:38:05 172.16.5.23 INFO payment UkTIZMm2rtbFFxnL3MA5Ia1kOALg0fzPtC1S11mHY45C7IyMhNhsUes5kPgojj
2025-06-02 20:38:06 192.168.0.10 WARN payment 9y4eaipCVODeTcOdX6CTz1VNW14jebm4alM29TOLgq90FxlEqs07RhAN
2025-06-02 20:38:07 10.0.0.1 ERROR payment YdHwTobqT7SuneT1ti741Wm8XWw9qsw34ZsHjZ9f9uR4QHScqPfoQDLf2puhLjsRb655ntO33DTs9Q
2025-06-02 20:38:08 10.0.0.1 INFO auth FD7cH9OqAbObae9PnSaVxomUznJHSacU5zAlp4njobTUrv29Z4lGjmhU035jyeEUn4CpDwMPLr6yO7cNmI9kre7goUa7PSbxk0HSRElHdfKeLjJYbNFHA2RhA05s
2025-06-02 20:38:09 192.168.0.10 WARN payment xQVZa4qipbzTYkD4Bnm0GuNduNV9fJ1xrB3MVDzyIdr3HjA9f1TfIXNQTpYLxdjWcFrKHVvdFN6CHCrgM
$

想定される用途

  • QAやE2Eテストのログ収集試験・負荷試験
  • ログ監視・集計ツールのUI確認
  • PlaywrightやSeleniumなどのテスト出力との連携

おわりに

このスクリプトを使えば、自由度の高いログデータを安全に・簡単に生成できます。
出力形式も柔軟なので、用途に応じてCSV形式やJSON形式への拡張も可能です。
実際のログに依存せず、ローカルで即テストできる環境はとても便利です。


Discussion