今回の講座の導入文
みんな、よう来たな!今日はPythonの「Logging」っていうライブラリについて学んでいくで。ログ出力って聞いたら、「なんやそれ、難しそうやなぁ」と思うかもしれんけど、実はめっちゃ大事なことやねん。ログを使うと、プログラムの動きがわかるようになって、エラーが出た時もどこがあかんのかすぐにわかるんや。
例えば、料理をするときにレシピをメモしておくやろ?それと同じで、プログラムもその動きや結果を記録しておくことで、後から振り返って何があったか確認できるんや。これがあれば、運営してるアプリやシステムのトラブルシューティングもスムーズにできるようになるで!
さて、今回はLoggingの基本的な使い方や、ログをどのように設定するかを楽しく学んでいこう!
① ロガーの設定と基本的なログ出力
さて、まずはロガーの設定から始めるで!ロガーってのは、ログを記録するための仕組みやねん。これを使えば、プログラムの実行中に何が起こったかをしっかり記録できるようになるんや。
ロガーの基本設定
まずは、ロガーを設定するためのコードを見てみよう!これを使うと、簡単にログを出力できるようになるで。
import logging
# ロガーの設定
logging.basicConfig(level=logging.DEBUG)
# 基本的なログ出力
logging.debug('デバッグ情報やで!')
logging.info('情報をお知らせするで!')
logging.warning('警告や、ちょっと注意してや!')
logging.error('エラーが発生したで!')
logging.critical('致命的なエラーや!早急に対応せなあかんで!')
このコードでは、logging
モジュールを使って、ロガーを設定してるんや。basicConfig
関数でログのレベルを指定して、様々なログメッセージを出力してるで。
ログレベルの使い方
ログにはいくつかのレベルがあって、それぞれの重要度に応じて使い分けることができるんや。上のコードを見てみたら、いろんなレベルのメッセージが出てきたやろ?これを上手に使うことで、どんな情報を記録するかをコントロールできるで。
これでロガーの基本的な設定とログ出力の方法がわかったと思うで!次は、もっと詳しくログレベルの使い分けを見ていこう!
② ログレベルの使い分け
さて、次はログレベルの使い分けについてや!ログレベルをうまく使いこなすことで、プログラムの動きに対する理解が深まるし、必要な情報だけを効率よく記録できるようになるんや。
ログレベルの種類
ログレベルは、以下のような種類があるんやで:
- DEBUG: デバッグ情報や詳細な動作の記録に使う。開発中やテスト中によく使うやつやな。
- INFO: 一般的な情報を記録する。プログラムの正常な動作を示す時に使うで。
- WARNING: 注意が必要な状況について記録する時に使う。例えば、データが正しくないかもしれん時などやな。
- ERROR: エラーが発生した時に使う。プログラムが正常に動作してないことを示してるで。
- CRITICAL: 致命的なエラーや、すぐに対応が必要な状況を示す。これが出たら大変やな!
ログレベルの設定
それじゃあ、実際にログレベルを使い分けてみるコードを見てみよう!
import logging
# ロガーの設定
logging.basicConfig(level=logging.DEBUG)
# 各ログレベルを使った出力
logging.debug('デバッグ情報やで!')
logging.info('正常に処理が進んでるで!')
logging.warning('ちょっと注意が必要な状態や!')
logging.error('エラーが発生したで!')
logging.critical('致命的なエラーや!早急に対応せなあかんで!')
このコードでは、各ログレベルに応じたメッセージを出力してるんや。プログラムの実行中にどんな状況があったか、後から振り返るための大事な情報になるで。
使い分けのポイント
- デバッグ中はDEBUGレベルを多用することで、詳細な情報を得られるし、問題解決がスムーズになるで。
- 運用中はINFOやWARNINGレベルを中心に使うと、必要な情報だけを記録できて、ログが見やすくなるんや。
これでログレベルの使い分けが分かったと思うで!次は、ログのフォーマット設定について学んでいこう!
③ ログのフォーマット設定
ほな、次はログのフォーマット設定について学んでいこう!ログのフォーマットを設定することで、出力されるログの見やすさがぐんとアップするんや。どんな情報がどの順番で表示されるかをカスタマイズできるから、自分の好きなスタイルに合わせられるで!
フォーマットの基本
ログのフォーマットは、basicConfig
のformat
引数で指定することができるんや。例えば、以下のように設定することで、ログの出力形式を変えることができるで。
フォーマットの例
import logging
# ロガーの設定とフォーマット指定
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# ログ出力
logging.debug('デバッグ情報やで!')
logging.info('正常に処理が進んでるで!')
logging.warning('ちょっと注意が必要な状態や!')
logging.error('エラーが発生したで!')
logging.critical('致命的なエラーや!早急に対応せなあかんで!')
このコードでは、ログメッセージに以下の情報を含めるように設定してるで:
%(asctime)s
: ログが出力された日時%(levelname)s
: ログレベル(DEBUG, INFO, WARNING, ERROR, CRITICAL)%(message)s
: 実際のログメッセージ
これを設定することで、ログの見た目が整って、後から見返す時にも分かりやすくなるんや。
フォーマットのカスタマイズ
もちろん、フォーマットは自由にカスタマイズできるで!他にも、ログの出力にユーザー名やファイル名、行番号なんかを含めることもできるんや。例えば、こんな感じにしてみるとええで。
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
これで、ログにロガーの名前も追加されるから、どの部分からのログかが分かりやすくなるで!
まとめ
ログのフォーマットを設定することで、見やすく、分かりやすいログを出力できるようになるんや。これで、プログラムの動きやエラーの追跡が楽になるで!次は、ファイルへのログ出力について学んでいこう!
④ ファイルへのログ出力
さて、次はファイルへのログ出力についてや!通常、コンソールにログを出力するだけやと、後から見返すのが難しいこともあるから、ファイルに保存することで、いつでもログを確認できるようにするんや。これができると、ログの管理がぐっと楽になるで!
ファイルへのログ出力設定
ログをファイルに出力するには、basicConfig
のfilename
引数を使うんや。以下のコードを見てみよう!
import logging
# ロガーの設定(ファイル出力)
logging.basicConfig(
filename='app.log', # ログファイル名
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# ログ出力
logging.debug('デバッグ情報やで!')
logging.info('正常に処理が進んでるで!')
logging.warning('ちょっと注意が必要な状態や!')
logging.error('エラーが発生したで!')
logging.critical('致命的なエラーや!早急に対応せなあかんで!')
このコードでは、filename='app.log'
を指定することで、全てのログがapp.log
というファイルに保存されるようになってるんや。これで、コンソールに表示されることなく、ファイルに記録されるで!
ファイルの確認
コードを実行したら、同じフォルダにapp.log
という名前のファイルができるから、これを開いてみてな。先ほど設定したフォーマットに従って、ログがちゃんと保存されてるのが確認できるはずや!
ログの追加設定
ファイルへのログ出力だけやなくて、エラーが発生した時だけ別のファイルに記録したり、ログの回転(ローテーション)を設定したりすることもできるんや。これについては、次のセクションで詳しく説明するで。
まとめ
ファイルにログを出力することで、後から簡単に確認できるようになるし、問題があった時に役立つで。これでファイルへのログ出力が理解できたと思うで!次は、ログのローテーションについて学んでいこう!
⑤ ログのローテーション
最後に、ログのローテーションについて学んでいこう!ログファイルが大きくなりすぎると、管理が大変やから、一定のサイズになったら自動的に新しいファイルに切り替える(ローテーション)設定をすることができるんや。これで、ファイルのサイズをコントロールできるで!
ログローテーションの設定
ログローテーションを実現するためには、logging
モジュールのRotatingFileHandler
を使うんや。これを使うことで、指定したサイズを超えたら新しいログファイルに切り替わるように設定できるで。以下のコードを見てみよう!
import logging
from logging.handlers import RotatingFileHandler
# ロガーの設定(ローテーション設定)
handler = RotatingFileHandler('app.log', maxBytes=5*1024, backupCount=3)
logging.basicConfig(
handlers=[handler],
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
# ログ出力
for i in range(1000):
logging.debug(f'ログメッセージ {i} やで!')
このコードでは、RotatingFileHandler
を使って、app.log
というファイルにログを保存してるんや。ここでの設定は以下の通りや:
maxBytes=5*1024
: ログファイルの最大サイズを5KBに設定。これを超えたら新しいファイルに切り替わるで。backupCount=3
: 古いログファイルを3つまで保存する設定や。これを超えた分は自動的に削除されるんや。
ログファイルの確認
コードを実行すると、app.log
が生成されて、指定したサイズを超えると新しいファイル(app.log.1
, app.log.2
, …)が作られるで。これで、古いログも保管されるから、後で確認することができるんや。
まとめ
ログのローテーションを設定することで、ログファイルのサイズを管理できるし、必要な情報を効率よく保存できるようになるんや。これで、プログラムの安定性や可読性が向上するで!
これで、ログ出力の基本的な使い方がマスターできたはずや。ログをうまく活用して、プログラムのトラブルシューティングを効率的に行ってな!次は、他の有名なライブラリについても学んでいこう!
フォーマット設定の極意!見やすいログ出力の使い方とサンプルコードを徹底解説!