オタクくん「ギャル先輩、本番環境でのログってどうしたらいいんですか?」
オタクくん「ギャル先輩、本番環境でのログってどうしたらいいんですか?」
ギャル先輩「おっ、オタクくんじゃん!どうしたん?また悩んでるの?」
オタクくん「そうなんです。本番環境でのログ管理がよくわからなくて…。何か気をつけるべきこととかありますか?」
ギャル先輩「あーし的には、まずログの重要性を理解するのが大事だと思うよ。ログっていうのは、アプリの動作やエラーの記録を残すものなんだよね。これがあると、後で問題が起きたときに原因を特定しやすくなるの」
オタクくん「なるほど。でも、具体的にはどうやってログを扱えばいいんでしょう?」
ギャル先輩「まずは、ログのレベルを理解しよう。ログには色々なレベルがあって、例えばINFO
、DEBUG
、ERROR
とかがあるんだ。こんな感じで使い分けるんだよ」
ログのレベル
import logging
logging.basicConfig(level=logging.DEBUG)
# DEBUGレベルのログ
logging.debug('これはデバッグ用のログです。')
# INFOレベルのログ
logging.info('これは情報ログです。')
# WARNINGレベルのログ
logging.warning('これは警告ログです。')
# ERRORレベルのログ
logging.error('これはエラーログです。')
# CRITICALレベルのログ
logging.critical('これは重大なエラーログです。')
オタクくん「なるほど、それぞれのログレベルには意味があるんですね。でも、本番環境ではどのレベルのログを記録すればいいんですか?」
ギャル先輩「基本的には、INFOレベル以上のログを記録するのがいいと思うよ。DEBUGレベルのログは開発中には便利だけど、本番環境では量が多すぎてノイズになっちゃうからね。」
オタクくん「了解です!他に気をつけることはありますか?」
ギャル先輩「うん、次はログのフォーマットだね。読みやすくするために、ログにはタイムスタンプやログレベルを含めるのが一般的だよ。こんな感じで設定してみて」
ログのフォーマット
logging.basicConfig(
format='%(asctime)s %(levelname)s: %(message)s',
level=logging.INFO
)
logging.info('フォーマットが設定されたログです。')
オタクくん「フォーマットも設定するんですね。これでログが見やすくなりますね!」
ギャル先輩「そうそう。それから、ログの保存先も考えなきゃね。本番環境では、ログをファイルに保存するのが一般的だよ。設定例を見せるね」
ログの保存先
logging.basicConfig(
filename='app.log',
format='%(asctime)s %(levelname)s: %(message)s',
level=logging.INFO
)
logging.info('これはファイルに保存されるログです。')
オタクくん「ファイルに保存するんですね。でも、ファイルが大きくなりすぎたらどうするんですか?」
ギャル先輩「いい質問だね!その場合はログローテーションを使うといいよ。ログファイルが一定サイズを超えたら新しいファイルに切り替えるんだ。RotatingFileHandler
を使って設定できるよ」
ログローテーション
from logging.handlers import RotatingFileHandler
handler = RotatingFileHandler('app.log', maxBytes=2000, backupCount=5)
logging.basicConfig(
handlers=[handler],
format='%(asctime)s %(levelname)s: %(message)s',
level=logging.INFO
)
logging.info('これはローテーションされるログです。')
オタクくん「おお、これでファイルが大きくなりすぎる心配がなくなりますね!」
ギャル先輩「うん、これで安心だね。他にもクラウドサービスを使ってログを集約する方法もあるんだけど、まずは基本を押さえてから挑戦してみるといいよ」
オタクくん「ありがとうございます!ギャル先輩のおかげで、ログ管理の基本がわかりました!」
ギャル先輩「ふふ、よかったじゃんwww これからもわからないことがあったらいつでも聞いてね!」
オタクくん「はい!本当にありがとうございました!」
Discussion