热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Retrofit2日志拦截器的使用

这篇文章主要介绍了Retrofit2日志拦截器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

显示样式如下,复制内容的时候使用鼠标中键进行选中

打印内容:code,请求方式,url,请求头,请求体,返回json

class LoggerInterceptor : Interceptor {
 override fun intercept(chain: Interceptor.Chain?): Response {
 val orgRequest = chain!!.request()
 val respOnse= chain.proceed(orgRequest)
 val body = orgRequest.body()
 val sb = StringBuilder()
 if (orgRequest.method() == "POST" && body is FormBody) {
  val body1 = body
  for (i in 0 until body1.size()) {
  sb.append(body1.encodedName(i) + "=" + body1.encodedValue(i) + ",")
  }
  sb.delete(sb.length - 1, sb.length)
  //打印post请求的信息
  Logger.t(AppConfigs.LOGGER_NET_TAG).d("code=" + response.code() + "|method=" + orgRequest.method() + "|url=" + orgRequest.url()
   + "\n" + "headers:" + orgRequest.headers().toMultimap()
   + "\n" + "post请求体:{" + sb.toString() + "}")
 } else {
  //打印get请求的信息
  Logger.t(AppConfigs.LOGGER_NET_TAG).d("code=" + response.code() + "|method=" + orgRequest.method() + "|url=" + orgRequest.url()
   + "\n" + "headers:" + orgRequest.headers().toMultimap())
 }
 //返回json
 val respOnseBody= response.body()
 val cOntentLength= responseBody!!.contentLength()
  val source = responseBody.source()
  source.request(java.lang.Long.MAX_VALUE)
  val buffer = source.buffer()
  var charset = UTF8
  val cOntentType= responseBody.contentType()
  if (contentType != null) {
  try {
   charset = contentType.charset(UTF8)
  } catch (e: UnsupportedCharsetException) {
   return response
  }

  }
  if (contentLength != 0L) {
  //打印返回json
  //json日志使用鼠标中键进行选中
  Logger.t(AppConfigs.LOGGER_NET_TAG).json(buffer.clone().readString(charset))
  }
 return response
 }

}

在Application中进行初始化Logger

val strategy = PrettyFormatStrategy.newBuilder()
  .showThreadInfo(false) // 是否显示线程信息,默认为ture
  .methodCount(1)  // 显示的方法行数
  .methodOffset(0) // 隐藏内部方法调用到偏移量
  .tag("tag")
  .build()
 Logger.addLogAdapter(object : AndroidLogAdapter(strategy) {
  override fun isLoggable(priority: Int, tag: String?): Boolean {
  return BuildConfig.DEBUG
  }
 })

除了需要依赖Retrofit2相关依赖外还需要依赖

implementation 'com.orhanobut:logger:2.2.0'

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


推荐阅读
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • Android 属性 allowBackup 的安全风险分析
    在 Android API Level 8 及以上版本中,系统提供了一种机制来备份和恢复应用程序数据。通过设置 allowBackup 属性,开发者可以控制是否允许这种备份和恢复功能。然而,这一功能也带来了潜在的安全风险。 ... [详细]
  • Ubuntu 环境下配置 LAMP 服务器
    本文详细介绍了如何在 Ubuntu 系统上安装和配置 LAMP(Linux、Apache、MySQL 和 PHP)服务器。包括 Apache 的安装、PHP 的配置以及 MySQL 数据库的设置,确保读者能够顺利搭建完整的 Web 开发环境。 ... [详细]
  • 本文介绍了编程语言的基本分类,包括机器语言、汇编语言和高级语言的特点及其优缺点。随后详细讲解了Python解释器的安装与配置方法,并探讨了Python变量的定义、使用及内存管理机制。 ... [详细]
  • 在开发板的启动选项中看到如下两行:7:LoadBootLoadercodethenwritetoFlashviaSerial.9:LoadBootLoadercodethenwri ... [详细]
  • 绿色守护、黑域、PackageDisablerPro 哪个更好用?
    本文对比了绿色守护、黑域和PackageDisablerPro三款应用管理工具,探讨它们各自的优势和适用场景。 ... [详细]
  • 本文介绍了如何使用 Gesture Detector 和 overridePendingTransition 方法来实现滑动界面和过渡动画。 ... [详细]
  • 驱动程序的基本结构1、Windows驱动程序中重要的数据结构1.1、驱动对象(DRIVER_OBJECT)每个驱动程序会有唯一的驱动对象与之对应,并且这个驱动对象是在驱 ... [详细]
  • 作为一名饼干爱好者,我尝试过各种各样的饼干。虽然威化饼和消化饼都有其独特的风味,但我对柠檬夹心饼干情有独钟。这种饼干不仅口感丰富,还带有清新的柠檬香味。 ... [详细]
  • 在 PHP 中,使用 `continue` 关键字结合数字可以有效地终止嵌套的 `foreach` 循环。本文将详细介绍如何使用 `continue` 加数字来控制不同层次的循环。 ... [详细]
  • 作为一名Android应用开发新手,我在尝试将MediaPlayer处理逻辑从MainActivity分离到另一个类时遇到了问题。尽管搜索了很长时间,但仍未找到满意的解决方案。 ... [详细]
  • 解决网页乱码问题的实用方法
    网页乱码问题在开发中较为常见,主要由文件编码、程序字符集设置和数据库连接字符集设置不当引起。本文将详细介绍如何逐一排查并解决这些问题。 ... [详细]
  • 本文介绍了如何使用开源工具ChkBugReport来解析和分析Android设备的Bugreport。ChkBugReport能够将复杂的Bugreport转换为易于阅读的HTML报告,并提供详细的图表和分析结论。 ... [详细]
  • 本文通过一个示例展示了如何使用HTML和CSS美化并实现响应式的按钮组。 ... [详细]
  • 本文介绍了三种解决 Git Push 冲突的方法,包括创建新分支、手动解决冲突和强行推送。这些方法适用于不同的开发场景,如版本迭代、多人协作和个人开发。 ... [详细]
author-avatar
南方的狼1975
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有