logging: 本番で使えるログ出力
print 卒業。ログレベルとファイル出力で運用に備える。
logging
標準のログ出力モジュール。
ログレベル
DEBUG < INFO < WARNING < ERROR < CRITICAL
ハンドラ
ログの出力先を決める。
ロギング基礎
開発中のデバッグには `print()` を使いがちですが、実運用では `logging` を使います。「いつ」「どこで」「何が」起きたのかをレベル別(INFO, ERRORなど)に管理でき、ファイルへの保存や外部サービスへの送信も簡単だからです。
import logging
# 基本設定logging.basicConfig( level=logging.INFO, format='%(asctime)s %(levelname)s %(message)s')
logger = logging.getLogger(__name__)
# ログ出力logger.debug('Debug message')logger.info('Info message')logger.warning('Warning message')logger.error('Error message')logger.critical('Critical message')Bad
# ❌ Bad: print でデバッグdef process(): print("Processing started") print(f"Value: {value}") print("Done")Good
# ✅ Good: logging を使うdef process(): logger.info("Processing started") logger.debug(f"Value: {value}") logger.info("Done")高度な設定
# ファイル出力logging.basicConfig( filename='app.log', level=logging.INFO, format='%(asctime)s %(name)s %(levelname)s %(message)s')
# ハンドラを使った設定handler = logging.FileHandler('app.log')handler.setFormatter(logging.Formatter( '%(asctime)s %(levelname)s %(message)s'))logger.addHandler(handler)
# 構造化ログ(JSON)import structlogstructlog.configure( processors=[structlog.processors.JSONRenderer()])log = structlog.get_logger()log.info("user_login", user_id=123, ip="192.168.1.1") Tip: 本番環境では structlog で JSON 形式がおすすめ。
合格ライン
ログレベルを使い分けられる
ファイル出力を設定できる
演習課題
課題1: ログレベル
DEBUG, INFO, WARNING, ERROR を使い分けてください。
課題2: ファイル出力
ログをファイルに出力する設定を行ってください。