Python学習【365日チャレンジ!】127日目のマスターU(@Udemy11)です。
Amazonプライムでキングダムのアニメをコンプリートしましたが、やっぱりその先のストーリーが気になるんですよね。
単行本を購入するのは結構お金がかかるので、漫画のネタバレブログでストーリーだけチェックしてみたのですが、これまたかなり時間が必要です。
1つ目のブログがキングダムの単行本のネタバレ解説をしているサイトで、2つ目が週刊ヤングジャンプの連載をネタバレ解説しているサイトです。
単行本は最新話までは出版されていないので、1つ目のブログで最新刊までの内容をチェックして、その後のストーリーは、2つ目のブログで連載をチェックしました。
ホウケンと信の戦いあたりはすでにドラゴンボールやワンピースあたりの無茶ぶりな感じにはなっていました。
ときおり、
ありえへんやろ〜!
と突っ込んでしまいたくなりますが、めっちゃおもしろくって引き込まれちゃうので、毎週木曜日には、ヤンジャンを立ち読みすることになりそうです。
ということで、今日もPython学習をはじめましょう!
昨日の復習
昨日は、ロギングのハンドラーの使い方について学習しました。
各種ハンドラーを使ってログをコンソールに出力したり、ファイルに出力したりすることができました。
コンソールに出力する際はStreamHandler
を使い、ファイルに出力する際はFileHandler
を使いました。
また過去に学習したフォーマッタを活用して、日付やファイル名やレベルを出力することができました。
詳しい内容は、昨日の記事を参考にしてください。
本日学習する内容は、出力するログのフィルタリングです。
ロギングフィルタ
ロギングフィルタは、出力するログに間違って不必要な情報が出力されないようにするためのフィルタとなるコードです。
一人で開発している場合は、まずありえないことですが、ログの出力にパスワードを出力してしまった場合はとんでもないことになってしまいます。
パスワードをログに出力するなんてありえないと思うかもしれませんが、IDとパスワードを入力してログインするシステムの場合、値を取得するわけですが、そのコードをなにかの表紙にコピペしてしまうことがありえないわけではありません。
そんな万が一のために、出力してはいけないものを出力しないようにするためのものがロギングフィルタです。
ロギングフィルタの書き方
そんなのありえへん!という気持ちを持ちながら、そのありえへんことを回避するためのコードを学習するのはなんとなく変な感じですが、やり方を覚えておけば、他の人のコードで見かけた時にきちんとコードを理解することができます。
ということで、そのありえへんコードが次のようなものです。
import logging
logging.basicConfig(level=logging.INFO)
class NotPassFilter(logging.Filter):
def filter(self, record):
message = record.getMessage()
return 'password' not in message
logger = logging.getLogger(__name__)
logger.addFilter(NotPassFilter())
logger.info('info test')
logger.info('info test password = "udemyfuncom"')
出力結果
INFO:__main__:info test
6行目から9行目でフィルタを設定して、13行目でロガーに設定したフィルタを渡しています。
logging.Filter
クラスを継承したNotPassFilter
クラスを作って、filter
メソッドをオーバーライドしています。
filter
メソッドは、True
が返り値になる場合はログを渡して、False
の場合はログを渡さないというメソッドです。
9行目の返り値が'password' not in message
なので、メッセージの中にpassword
という単語が入っていない場合はTrue
を返して、入っている場合はFalse
を返します。
つまり、上記コードでは、15行目のメッセージにpassword
が含まれているので、このログは出力されません。
例えば、このメッセージのpassword
の部分をpass
に変更すると、13行目でTrue
が渡されるので、きちんと15行目のログが出力されます。
使い方がいまいちわからない
正直なところ、現状でこのフィルタの使い方がイマイチイメージできません。
パスワードなどが含まれている場合にフィルタを掛けて出力するといっても、一人でコードを書いている限りはそんなことをしないと思うのですが、実践が足りない私には、疑問に思うばかり。
まだまだ修行が足りないので、すべてのレクチャーを一巡してから、理解できていないところは、実践しながら学習していこうと思います。
それでは、明日もGood Python!