こんにちは、Python ロギングで使用しています。コンソールからパスワードを置き換え、フィルタを使用してファイルをデバッグしたいと考えています。ただし、一部の場合にのみ機能します
import logging
import logging.config
from collections import defaultdict
class AwesomeFilter(logging.Filter):
def filter(self, rec):
if 'password' in rec:
return "here is password, i hide this line"
else:
return 1
LOG_CONFIG = {
'version': 1,
'filters': {
'file_filter': {
'()': AwesomeFilter,
},
},
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s %(name)s [%(levelname)s]: %(message)s'
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'INFO',
'formatter': 'standard',
'filters': ['file_filter'],
},
},
'loggers': {
'': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
'propagate': True
},
}
}
logging.config.dictConfig(LOG_CONFIG)
私が書いた場合、これは機能します
log.info("line with my super password") - ここで動作し、行全体を置き換えます
しかし、私が使用したい場合
log.info ("返された行は %s") であり、%s は文字列です "ここにパスワードがあります" フィルタは次の理由により、この行を無視します:
<LogRecord: PGSQLDatabaseConnection, 20, dluznici.py, 172, "returned line is: %s">
だから、ここには「パスワード」という単語はありません... %s のパスワードを確認するにはどうすればよいですか?
ここでもフィルターを定義する必要がありますか?
class PGSQLDatabase:
def __init__(self, conn_params, session_params):
self.log = logging.getLogger('PGSQLDatabaseConnection')
self.filter = ????????????