python - Python 记录器过滤器在 msg %s 变量中不起作用
问题描述
嗨,我正在使用 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 ("returned line is %s") and in %s is string "here is password" 过滤器忽略这一行,因为:
<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 = ????????????
解决方案
好的,我可以在过滤器中搜索 args :)
推荐阅读
- oracle - 尝试创建 proc 但出现错误
- spring-boot - 我正在尝试将带有预签名 URL 的图像上传到 Google Cloud Storage,但对象元数据已写入对象
- matplotlib - 无法解释 matplotlib 绘图
- ionic-framework - 离子 + Android 9 + 文件传输
- r - R Github 热图颜色修改
- java - 在 Java 中使用 GUI jButton 更新 JDBC 会导致 java.lang.NullPointerException
- c# - 我没有在 Y 坐标图上绘制正确数据的错误在哪里
- python - 使 Python 脚本可执行并添加包 (Windows)
- reactjs - Adding items to commandbar fabricui
- bash - zsh: command not found: nest