0

こんにちは、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 = ????????????


4

1 に答える 1