我正在使用用于 Retrofit2 的自定义拦截器,以便以漂亮的格式记录所有请求/响应 json。
问题是此日志不仅用于本地调试目的,而且还发送到Instabug(类似于Crashlytics(以帮助调试用户报告的问题或崩溃。
因此,该服务中的信息不包含用户身份信息(如电子邮件、密码等(非常重要。
由于在拦截器中我们只获得原始请求/响应是手动检查所有可能的敏感字段并将其从 json 的记录版本中删除的唯一解决方案?
以下是从日志中过滤任何请求/响应参数的简单方法:
// Request patterns to filter
private static final String[] REQUEST_PATTERNS = {
"Content-Type",
};
// Response patterns to filter
private static final String[] RESPONSE_PATTERNS = {"Server", "server", "X-Powered-By", "Set-Cookie", "Expires", "Cache-Control", "Pragma", "Content-Length", "access-control-allow-origin"};
// Log requests and response
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
// Blacklist the elements not required
for (String pattern: REQUEST_PATTERNS) {
if (message.startsWith(pattern)) {
return;
}
}
// Any response patterns as well...
for (String pattern: RESPONSE_PATTERNS) {
if (message.startsWith(pattern)) {
return;
}
}
Log.d("RETROFIT", message);
}
});
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
以下是完整的要点:
https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168