Udemy講座 Python ロギングフィルタ

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

Amazonプライムでキングダムのアニメをコンプリートしましたが、やっぱりその先のストーリーが気になるんですよね。

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行目のログが出力されます。

使い方がいまいちわからない

正直なところ、現状でこのフィルタの使い方がイマイチイメージできません。

パスワードなどが含まれている場合にフィルタを掛けて出力するといっても、一人でコードを書いている限りはそんなことをしないと思うのですが、実践が足りない私には、疑問に思うばかり。

まだまだ修行が足りないので、すべてのレクチャーを一巡してから、理解できていないところは、実践しながら学習していこうと思います。

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

それでは、明日もGood Python!