前回の記事に引き続き、今回も仮想通貨botの開発状況をまとめていきます。
対象読者:
VSCode で Python を書き始めたばかり / Docker・Git をこれから触る 初心者の方向け。
「まず動く」「まず安全」のために、きょう私が実装した 超 小さな改善を共有します。
この記事で学べること
- ログレベルって何? ──
INFO
とWARNING
を分ける理由 - Loguru + Makefile で warn.log を 1 行で分離する手順
- logging_setup.py パターン──“設定は import だけで完了” の作り方
- .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 main | GitHub にアップロード |
きょう私が打った実コマンド:
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)
pytest
導入 → テストが 0 件でも緑で動く状態をまず作る- GitHub Actions に
pytest
とgitleaks
を貼って 自動スキャン - README に “Quick Start” を 10 行だけ追記して、誰でも回せる形へ
「ログで事故を見逃さない」 たった 1 行の追加が、夜中のアラート対応のスピードを一段引き上げてくれます。
みなさんも “まず警告ログだけ切り出す” から始めてみてください!