我正在为 Retrofit2 使用自定义拦截器,以便以漂亮的格式记录所有请求/响应 json。
问题是此日志不仅用于本地调试目的,而且还发送到 Instabug(类似于 Crashlytics)以帮助调试用户报告的问题或崩溃。
因此,重要的是该服务中的信息不包含用户可识别信息,如电子邮件、密码等。
因为在拦截器中,我们只获得原始请求/响应是手动检查所有可能的敏感字段并将它们从记录的 json 版本中删除的唯一解决方案?
我正在为 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