Android 进阶学习(三十一) Android Logger 的探索

object TsmLogUtils {

  const val TAG_WORKER="tsm_work_tag"


  @JvmStatic
  fun i(message:String?){
      /**
       * 获取调用方法栈,可以获取到所有的类的信息,从而在打印日志过程中自动添加调用的打印日志的类名和方法名,还有行号
       */
      var trace: kotlin.Array<java.lang.StackTraceElement?>? =Thread.currentThread().stackTrace
      trace?.apply {
          var index=-1
          for (stackIndex in trace.indices) {
              var className= getSimpleClassName(trace[stackIndex]?.className ?:"")
              if(TsmLogUtils::class.java.simpleName == className){
                  index=stackIndex+1
                  break
              }
          }
          if(index in 0 until size){
              var builder = StringBuilder()
              builder.append("\n")
                  .append("----------------------------")
                  .append("\n")
                  .append(trace[index]?.className)
                  .append(".")
                  .append(trace[index]?.methodName)
                  .append(" ")
                  .append(" (")
                  .append(trace[index]?.fileName)
                  .append(":")
                  .append(trace[index]?.lineNumber)
                  .append(")")
                  .append("\n")
                  .append("$message")
                  .append("\n")
                  .append("------------------------------------------------------------------------------------")

              Log.i("tian.shm", builder.toString())
          }
      }
  }


  private fun getSimpleClassName( name: String): String? {
      val lastIndex = name.lastIndexOf(".")
      return name.substring(lastIndex + 1)
  }
}

使用这个方法打印出来的日志的样式


image.png

其中蓝色的字体点击是可以自动定位到打印日志的地方,非常方便

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容