跳转至

日志记录器

一般网络请求都会选择在LogCat打印网络日志信息, 但是AndroidStudio的LogCat超长文本会被切割, 甚至发生不完整的情况, 而且容易和其他日志掺杂, 导致可读性差.

Net扩展Okhttp Profiler插件支持更好的日志拦截信息, 支持加密的请求和响应信息

安装插件

1) 安装插件

在插件市场搜索: "Okhttp Profiler"

2) 打开窗口

安装以后在AndroidStudio右下角打开窗口

请在每次使用前都先打开插件窗口, 如果有延迟或者不显示就反复打开下窗口

3) 初始化

initNet("http://182.92.97.186/") {
    converter(JsonConvert()) // 转换器
    setLogRecord(true) // 开启日志记录功能
}

使用效果

标题 描述
Device 选择调试设备
Process 选择展示记录的进程
抓取 一般情况不需要使用, 假设没有及时更新请点击图标
清空 清空记录

响应字符串解密

假设你使用的是DefaultConvert或者没有使用转换器直接返回String则无需多余处理, 如果覆写或者直接实现的Convert, 请确保result.logResponseBody被赋值

@Suppress("UNCHECKED_CAST")
abstract class DefaultConvert(
    val success: String = "0",
    val code: String = "code",
    val message: String = "msg"
) : Converter {

    override fun <S> convert(
        succeed: Type,
        request: Request,
        response: Response,
        cache: Boolean
    ): S? {
        val body = response.body().string()
        response.log = body // 将字符串响应赋值给response.log
        // .... 其他操作
    }
}

假设后端返回的加密数据, 可以为response.log赋值解密后的字符串

请求参数加密

假设请求参数为加密后的字符串请在拦截器中为日志记录器赋值请求参数字符串

class NetInterceptor : Interceptor {
    override fun intercept(chain: Chain): Response {
        val request = chain.request()

        request.log = "解密后的请求参数字符串"

        return chain.proceed(request)
    }
}


响应和请求都可以设置日志信息, 以在插件中查看

函数 描述
request.log 请求的日志信息, 默认是params
response.log 响应的日志信息, 默认为空

LogCat冗余日志过滤

实际上Net的网络日志还是会被打印到LogCat, 然后通过插件捕捉显示.

如果不想LogCat的冗余日志影响查看其它日志, 可以通过AndroidStudio的功能折叠隐藏, 添加一个OKPREL_过滤字段即可

扩展至其他请求框架

可能你项目中还残留其他网络框架, 也可以使用Net的日志记录器LogRecorder来为其他框架打印日志信息

函数 描述
generateId 产生一个唯一标识符, 用于判断为同一网络请求
recordRequest 记录请求信息
recordResponse 记录响应信息
recordException 记录请求异常信息