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

object TsmLogUtils {

  const val TAG_WORKER="tsm_work_tag"


  @JvmStatic
  fun i(message:String?){
      /**
       * 获取调用方法栈,可以获取到所有的类的信息,从而在打印日志过程中自动添加调用的打印日志的类名和方法名,还有行号
       */
      var trace: kotlin.Array? =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

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

你可能感兴趣的:(Android 进阶学习(三十一) Android Logger 的探索)