Mik*_*ikA 6 python logging stdout
我正在使用库“日志记录”在我的脚本中记录信息和警告消息,无论如何我可以在打印到标准输出时过滤掉密码(我有多个密码并希望用星号替换它们)?
为了过滤掉包含特定的词从你的密码列表stdout流(这就是logging.DEBUG和logging.INFO消息都)和stderr流(这其中logging.WARNING,logging.ERROR和logging.CRITICAL消息走),你可以用一个简单的类,之前替换关键的词替换原有的流把它们写出来:
class PasswordFilter(object):
def __init__(self, strings_to_filter, stream):
self.stream = stream
self.strings_to_filter = strings_to_filter
def __getattr__(self, attr_name):
return getattr(self.stream, attr_name)
def write(self, data):
for string in self.strings_to_filter:
data = re.sub(r'\b{0}\b'.format(string), '*' * len(string), data)
self.stream.write(data)
self.stream.flush()
def flush(self):
self.stream.flush()
Run Code Online (Sandbox Code Playgroud)
用过滤后的流替换原始流,如下所示:
top_secret_passwords = ['do not tell me', 'I am secret', 'important', 'foo',
'foobar']
sys.stdout = PasswordFilter(top_secret_passwords, sys.stdout)
sys.stderr = PasswordFilter(top_secret_passwords, sys.stderr)
Run Code Online (Sandbox Code Playgroud)
现在,设置日志记录并写入一些日志消息:
# set up your logging after activating the filter, won't work otherwise
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('You cannot see me anymore: {0}'.format(top_secret_passwords[0]))
logger.info('You cannot see me anymore: {0}'.format(top_secret_passwords[1]))
logger.warning('You cannot see me anymore: {0}'.format(top_secret_passwords[2]))
logger.error('You cannot see me anymore: {0}'.format(top_secret_passwords[3]))
logger.critical('You cannot see me anymore: {0}'.format(top_secret_passwords[4]))
Run Code Online (Sandbox Code Playgroud)
输出将如下所示:
DEBUG:__main__:You cannot see me anymore: **************
INFO:__main__:You cannot see me anymore: ***********
WARNING:__main__:You cannot see me anymore: *********
ERROR:__main__:You cannot see me anymore: ***
CRITICAL:__main__:You cannot see me anymore: ******
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2509 次 |
| 最近记录: |