📖
【ログ作成】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