在做 Android 开发的时候,好的日志输出,能够快速定位问题所在。之前在使用 Java 开发 Android 的时候,我使用的是这个库: orhanobut/logger

现在使用 Kotlin 开发 Android ,还想继续使用这个库,而开发阶段常见的日志输出是 将接口返回的结果打印出来,下面就介绍如何在 Kotlin 项目中接入 logger库。

集成

module下的 build.gradle中添加

implementation 'com.orhanobut:logger:2.2.0'

接着在 application 中初始化

Logger.addLogAdapter(AndroidLogAdapter())

application中还可以对logger进行一些高级的配置

val formatStrategy = PrettyFormatStrategy.newBuilder()   .showThreadInfo(false)  // 输出线程信息. 默认输出   .methodCount(0)         // 方法栈打印的个数,默认是2   .methodOffset(7)        // 设置调用堆栈的函数偏移值,0的话则从打印该Log的函数开始输出堆栈信息,默认是0   .logStrategy(LogCatStrategy())   .build()Logger.addLogAdapter(AndroidLogAdapter(formatStrategy))

LogCatStrategy 策略是解决 AndroidStudio logcat 日志换行问题

class LogCatStrategy: LogStrategy {    override fun log(priority: Int, tag: String?, message: String) {        Log.println(priority, randomKey() + tag!!, message)    }    private var last: Int = 0    private fun randomKey(): String {        var random = (10 * Math.random()).toInt()        if (random == last) {            random = (random + 1) % 10        }        last = random        return random.toString()    }}

基本使用

Logger.d("debug");Logger.e("error");Logger.w("warning");Logger.v("verbose");Logger.i("information");Logger.wtf("What a Terrible Failure");

查看项目主页 orhanobut/logger README有详细介绍。

输出网络日志

前提是 OkHttp 网络请求库已经集成。可以参考我的组件化框架项目:FrameDemo 里面的网络请求集成。

网络请求使用的是 OkHttp

com.squareup.okhttp3:okhttp:4.0.0

日志拦截使用的是logging-interceptor

com.squareup.okhttp3:logging-interceptor:4.0.0

在 OkHttp 中使用 logger 输出日志只需要简单几步即可

  1. 在 OkHttp 中添加拦截器(重点看中文注释部分即可)
private fun getOkHttpClient(): OkHttpClient {        val cacheFile = File(BaseApplication.context.cacheDir, "cache")        val cache = Cache(cacheFile, 1024 * 1024 * 50)         // 创建日志拦截器 HttpLogger() 是自定义的类        val logInterceptor = HttpLoggingInterceptor(HttpLogger())        logInterceptor.level = HttpLoggingInterceptor.Level.BODY                return OkHttpClient.Builder()            .cache(cache)             .connectTimeout(60L, TimeUnit.SECONDS)            .readTimeout(60L, TimeUnit.SECONDS)            .writeTimeout(60L, TimeUnit.SECONDS)            .cookieJar(PersistentCookieJar(SetCookieCache(), SharedPrefsCookiePersistor(BaseApplication.context)))            .addInterceptor(ChangeBaseUrlInterceptor())            .addInterceptor(CacheInterceptor())            // 添加日志拦截拦截器            .addNetworkInterceptor(logInterceptor)            .addInterceptor(CheckLoginInterceptor())            .build()    }
  1. 在自定义的类中将日志打印出来 (相关工具类可在 FrameDemo 项目的lib_common 模块下的 utils包下找到)
class HttpLogger: HttpLoggingInterceptor.Logger {    override fun log(message: String) {        var msg = message        // 以{}或者[]形式的说明是响应结果的json数据,需要进行格式化        if ((msg.startsWith("{") && msg.endsWith("}"))            || (msg.startsWith("[") && msg.endsWith("]"))) {            msg = JsonUtils.formatJson(JsonUtils.decodeUnicode(msg))        }        LogUtils.d(msg)    }}


PS:图中红色框中的按钮不要选中,不然会出现日志格式化失败。

更多相关文章

  1. 64位ubuntu11.10使用git下载android源码
  2. Android(安卓)adb的使用略解
  3. Android实例剖析
  4. Android(安卓)中如何选择 compileSdkVersion,buildToolsVersion,
  5. Android使用Intent Filter来响应隐式Intent
  6. drawable属性
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. Appium环境搭建
  2. apktool之APK解压、打包
  3. Android(安卓)串口通信开发笔记3:CMake 方
  4. Android display架构分析-SW架构分析(1-4
  5. Android技术框架概要
  6. android 1.6全部的权限介绍
  7. Android Studio 小技巧(1):如何导入AAR文件
  8. 修改android自带播放器界面
  9. Android下获取开机时间
  10. Android架构分析之JNI