Bot mmnot 開発ログ

🛠️開発記録#212(2025/5/7)MMbot 開発ログ18「Loguru × Makefile:警告ログだけリアルタイム監視する開発術」

前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。

対象読者:
VSCode で Python を書き始めたばかり / Docker・Git をこれから触る 初心者の方向け。
「まず動く」「まず安全」のために、きょう私が実装した 小さな改善を共有します。


この記事で学べること

  1. ログレベルって何? ── INFOWARNING を分ける理由
  2. Loguru + Makefile で warn.log を 1 行で分離する手順
  3. logging_setup.py パターン──“設定は import だけで完了” の作り方
  4. .gitignore の拡張&小さいコミットで安全に push する流れ

1. なぜ「警告ログだけ」切り出したいの?

シーン起こりがちな困りごと
Bot が静かに止まっていた5000 行の DEBUG ログに WARN が埋もれていた
デプロイ後に Slack が警告まみれINFO も WARNING も同じチャンネルに投げていた
ログを tail していたら 重要行だけ流れたrotation でファイルが切り替わり tail -f が外れた

対策:「WARN 以上だけを 専用ファイル に書き、tail -F で常時監視する」


2. Loguru で warn.log を 1 行追加

2-1. logging_setup.py(新規ファイル)

from pathlib import Path
from loguru import logger

LOG_DIR = Path("/app/logs")
LOG_DIR.mkdir(parents=True, exist_ok=True)

logger.remove()                       # 既定ハンドラを解除
logger.add(lambda m: print(m, end=""))  # 標準出力 (全レベル)

# ★ WARN 以上だけ
logger.add(
    LOG_DIR / "warn.log",
    level="WARNING",                  # ←ここがポイント
    rotation="10 MB",
    retention="30 days",
    compression="zip",
    format="{time:YYYY-MM-DD HH:mm:ss,Asia/Tokyo} | {level} | {message}",
    enqueue=True,
)

# 通常ログ(DEBUG〜INFO も含む)
logger.add(
    LOG_DIR / "mm_bot_{time:YYYYMMDD_HHmmss}.log",
    rotation="00:00",
    retention="7 days",
    compression="zip",
    enqueue=True,
)

2-2. Bot 本体に 1 行だけ追加

import MMbotbybit.logging_setup   # ← import するだけでロガー登録完了

# noqa: E402,F401 を付ければ Linter 警告をスルーできます。


3. Makefile に tail エイリアスを 2 行

logs-warn:
	@tail -F logs/warn.log
.PHONY: logs-warn

使い方

make logs-warn    # これだけで WARN が流れる

ログローテーションが走っても tail -F ならファイル切替えを追従してくれるので安心。


4. .gitignore を広げて“秘密”と“ゴミ”をブロック

# --- Runtime logs ---
*.log
logs/

# --- Secrets ---
slack_config.json
.env.*

# --- Generated configs ---
config_*net.json

# --- Backups / scratch ---
*.bak
MMbotbybit/*check*.py

Git 完全初心者メモ

コマンド意味
git add <file>スナップショット候補に載せる
git commit -m "msg"候補を 1 つの履歴に固める
git push origin mainGitHub にアップロード

きょう私が打った実コマンド:

git add MMbotbybit/logging_setup.py MMbotbybit/MMbotbybit.py Makefile
git commit -m "feat: move logging to logging_setup"
git push origin main

5. 動作確認(3 行で終わり)

make logs-warn &
python MMbotbybit/MMbotbybit.py --mode testnet --max_cycles 2
# → タイムアウトや max_cycles 超過で WARNING が流れたら成功!

表示例:

2025-05-07 10:12:34 | WARNING | wait_for_fill timeout → cancel 12345

6. きょうの学び・まとめ

学び初心者に刺さる要点
ログレベルINFO=通常情報、WARNING=要注意、ERROR=致命的
専用ログファイルフィルタリングは logger.add(..., level="WARNING") 1 行で完了
設定の“副作用 import”import logging_setup だけで全スクリプトが同じログポリシーを共有
小さいコミット1 タスク → 1 コミット → 1 push がデバッグ最短ルート
.gitignore 拡張ログと秘密鍵は “書かない” 文化を最初に身につける

次の一歩(明日の To-Do)

  1. pytest 導入 → テストが 0 件でも緑で動く状態をまず作る
  2. GitHub Actions に pytestgitleaks を貼って 自動スキャン
  3. README に “Quick Start” を 10 行だけ追記して、誰でも回せる形へ

「ログで事故を見逃さない」 たった 1 行の追加が、夜中のアラート対応のスピードを一段引き上げてくれます。
みなさんも “まず警告ログだけ切り出す” から始めてみてください!

-Bot, mmnot, 開発ログ