一个高性能的Android日志库

clue

一个高性能的Android日志库.

项目地址: https://github.com/linsea/clue

为什么性能高

通常的Android日志库, 为了获取到class名, 方法名, 行号, 都是通过以下API实现的:

StackTraceElement[] stacks = Thread.currentThread().getStackTrace(); //expensive cost
StackTraceElement element = stacks[4];
int lineNumber = element.getLineNumber();
String fileName = element.getFileName()

以上的方式损耗的性能是很高昂的, 线上代码中不应该出现.

显然, 如果代码写好, 在编译之前, 所有的class名, 方法名, 行号是固定的, 不会再变化,不应该在运行时通过以上代价高昂的方式去动态获取.

clue日志库没有调用以上API来获取class名, 方法名, 行号, 而是换了另外一种思路, 它通过在编译期操作class文件字节码, 从中获取这些信息. 这对于追求极致性能的应用非常有价值, 或者不希望因为打印日志而降低应用的性能, 或者需要记录线上APP运行日志的场景尤其有用.

功能

  • Class名字作为默认的tag, 或者自定义tag
  • 显示调用者的方法名
  • 显示源代码行号
  • 显示线程名
  • 在Android Studio的日志窗口中点击日志中的文件名跳转到源代码相应的位置
  • 无性能损耗地获取以上日志信息
  • 可扩展的API接口设计

使用方法

1 在项目的顶级 build.gradle 文件中引用插件的classpath.

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "gradle.plugin.com.github.linsea:clue-plugin:1.0.0"
  }
}

2 在项目的 build.gradle 中应用插件.

apply plugin: "com.github.linsea.clue-plugin"

3 在项目的 build.gradle 加入依赖库.

compile 'com.linsea:clue:1.0'

4 在 Application class中加入一个log实例.

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Clue.addLog(new ConsoleLog()); //初始化Clue log,默认使用系统的Logcat输出到控制台.
    }
}

5 调用 Clue 类的静态方法记录日志. 比如:


public static void v(String message, Object... args);

public static void vt(String tag, String message, Object... args)

public static void v(Throwable t, String message, Object... args)

public static void vt(String tag, Throwable t, String message, Object... args)

更详细的使用方法请参考位于 clue/clue-sample 的示例项目.

扩展接口

你可以添加自己的logger实现来扩展Clue, 比如继承BaseLog实现一个把日志写入文件的Log Receiver, 然后调用Clue.add(...)把它添加进Clue中, 具体可以参考库中ConsoleLog的实现.

转载于:https://my.oschina.net/u/1403288/blog/870219

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值