Pythonを使ったロギングの機能について、ここではフィルタ(filter)を見ていきましょう。
ロギングのフィルタは、ログ出力をする時に、どのログ記録を出力するかをきめ細かく設定する機能となります。
例えばパスワード情報などをログ出力させたくない場合などに、フィルタリングすると言う機能です。
フィルタの設定
ここではパスワードを例に、ロギングのフィルタを見ていきましょう。
まず次のようなコードを書いてみます。
ロガーで出力する簡単なコードです。
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('from main')
logger.info('from main password = "mypw0123456789"')
これまでと同じ処理で、ここでは何も特にしていません。違いは最後の行にpasswordをログ出力するコードになっているだけです。
このPythonファイルをターミナルで実行するとこうなります。
当然、passwordもログとして出力されているのがわかります。
こういったパスワードのようなものをログと出力したくないわけで、ここでフィルタの処理を設定する必要があります。
上のコードを次のようにコードを追加します。
import logging
logging.basicConfig(level=logging.INFO)
class NoPasswordFilter(logging.Filter):
def filter(self, record):
log_message = record.getMessage()
return 'password' not in log_message
logger = logging.getLogger(__name__)
logger.addFilter(NoPasswordFilter())
logger.info('from main')
logger.info('from main password = "mypw0123456789"')
ここではNoPasswordFilter()クラスというログ専用のフィルタのクラスを作成し、logging.Filterクラスを継承させて、filter()でフィルタの条件を設定しています。getMessage()で得られたログの中に「password」が含まれたないというフィルタをかけています。
ここでのfilter()はログに「password」という文字列が含まれていなければTrueを返してロギングしますが、含まれている場合はFalseになってロギングしないということになります。これでpasswordがロギングされないというフィルタになります。
このフィルタをaddFilter()でロガーに付け加えています。
実行してみましょう。
コンソールにはpasswordが出力されていないのがわかります。これでフィルタが機能しているのがわかりました。
このlogger.info(‘from main password = “mypw0123456789″‘)のpasswordの文字列をloginnumberに変えてみるとどうなるでしょう。
import logging
logging.basicConfig(level=logging.INFO)
class NoPasswordFilter(logging.Filter):
def filter(self, record):
log_message = record.getMessage()
return 'password' not in log_message
logger = logging.getLogger(__name__)
logger.addFilter(NoPasswordFilter())
logger.info('from main')
logger.info('from main loginnumber = "mypw0123456789"')
passwordではなくなっているので、パスワードのフィルタリングが効かずに表示されているのがわかります。
まとめ
Pythonを使ったロギングの機能について、ここではフィルタ(filter)を扱いました。
ロギングのフィルタは、ログ出力をする時に、どのログ記録を出力するかをきめ細かく設定する機能です。
パスワードをログ出力したくない時などにフィルタリングするというような設定を施します。