Udemy講座 Pythonista ロギングのフォーマッタ formatter

Python学習【365日チャレンジ!】124日目のマスターU(@Udemy11)です。

今日は、初めてホームベーカリーを使って、クロワッサンを焼いてみました。

ホームベーカリーは生地をこねるだけなので、食パンと違って、さらにひと手間ふた手間かかります。

生地を広げてパターをたっぷり100gほど使って、パターを塗りながら生地を重ねていくのですが、バターがもったいないので、30gくらいしか使いませんでした。

そしたら、案の定、焼き上がりはあんまりバターの風味がありませんでした。

ま〜、クロワッサン自体は美味しかったので問題なかったのですが、お店で売られているクロワッサンってかなりバターが使われてるんだなってことがわかった一日でした。

それでは今日も、Python学習をはじめていきましょう!

昨日の復習

昨日は、ログを記録するロギングについて学習しました。

必要な時に必要なログを出力させるには、ロギングを使ってコードを書く必要がありました。

Pythonで扱うログのレベルはCRITICALERRORWARNINGINFODEBUGの5種類で、デフォルトで出力できるのがCRITICALERRORWARNINGの3つでした。

INFODEBUGのログを出力するには、basicConfigの引数levelを指定する必要がありました。

その他、ロギングの基本については、昨日の記事をごらんください。

本日の学習内容は、ロギングのフォーマッタです。

ロギングのフォーマッタ

loggingを使ってログを記録する時に、デフォルトで出力されるフォーマットがあります。

WARNING:root:message

例えばWARNINGの出力は上記のように、WARNING:root:のあとに、指定したメッセージが入ります。

この出力フォーマットを変更できるのが、フォーマッタです。

import logging

formatter = '%(levelname)s:%(message)s'
logging.basicConfig(level=logging.DEBUG, format=formatter)


logging.debug('デバッグ')

出力結果

DEBUG:デバッグ

basicConfigの引数format%()s形式の値を代入した変数formatterを指定することで、出力するログを変更することができます。

ロギングでは、何かのログを記録するたびにLogRecordインスタンスが勝手に生成されますが、3行目で、そのLogRecordの属性であるlevelnamemessage%()s形式で指定しています。

出力可能な属性

levelnamemessage以外にもLogRecordインスタンスの属性はいろいろと用意されています。

Python ロギングのフォーマッタ formatter

こちらは、Python公式ドキュメントからその一部を抜粋したものですが、使用頻度が高いものといえばやはり、現在時刻を取得する%(asctime)sでしょう。

import logging

formatter = '%(asctime)s:%(levelname)s:%(message)s'
logging.basicConfig(level=logging.INFO, format=formatter)


logging.info('ただのインフォメーションです')

出力結果

2020-06-13 17:52:15,282:INFO:ただのインフォメーションです

いつ問題が発生しているのかを確認するためには、ログに日時を入れる必要がありますし、その他の属性情報もしっかりとログに残しておく必要があります。

かなり地味だけど重要

ログを記録するというと、自動的に記録されているというイメージがあります。

自動的に記録されるのには間違いありませんが、どんなログを残すかはプログラマーが決めているわけです。

ログは、通常に作動していれば、表に出ることはありませんが、たよりになる裏方というイメージで、なにか問題が起こったときには、きちんと原因究明ができるようなログを残しておく必要があります。

コード中のどの部分でどんなログを残すかというのは、プログラマーのセンスが問われるところです。

ロギングはかなり地味なコードですが、非常に重要なので、しっかりと理解するようにしましょう!

それでは、明日もGood Python!

Udemyで超おすすめのPython講座はこちら!

Udemy講師 酒井さん プログラミング Python