在程序开发过程中,我们经常需要输出某些值,通常我们可以通过system.out.println等相关的方法输出,例如下面的代码
Button logButton = findViewById(R.id.logButton); logButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { System.out.println("println输入日志信息"); } }); |
输出结果如下图所示:
我们可以在Android Studio提供Logcat查看输出的结果。
其实在Android API中,提供了一个日志工具类android.util.Log,通过这个类我们可以以不同的级别输出日志,Android的Log等级通常有六类,按照日志级别由低到高分别是Verbose、Debug、Info、Warning、Error、Assert。
日志的级别及输出方法如下表所示:
级别 |
输出方法 |
Verbose |
Log.v |
Debug |
Log.d |
Info |
Log.i |
Warn |
Log.w |
Error |
Log.e |
Assert |
Log.wtf |
注:Verbose这个单词的含义是冗长的啰嗦的。
这些方法通常有两个重载的版本,如下所示:
static int v(String tag, String msg) static int v(String tag, String msg, Throwable tr) |
下面给出一个样例代码:
Log.v("MainActivity","Log.v输入日志信息"); |
输出结果如下图所示:
我们可以Logcat在Logcat中对日志进行过滤,如下图所示:
此外,我们还可以通过Android studio中File菜单下的Settings,设置不同级别Log的颜色,如下图所示:
注意:设置时,请先取消Inherit values from的复选。
下面我来研究一下如何控制日志的输出。
通常我们希望只有在调试的时候输出日志,正式发布时,不输出日志信息,这样能够保证系统的安全性。我们可以借助gradle的变量定义来完成这个功能。
首先我们在app的build.gradle的debug和release中分别定义变量SHOW_LOG,并设置不同的值,如下图所示:
这样我们就可以通过BuildConfig.SHOW_LOG获取变量值,控制日志的输出,代码如下:
Button logButton = findViewById(R.id.logButton); logButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(BuildConfig.SHOW_LOG){ Log.v("MainActivity","Log.v输入日志信息"); } } }); |
关于gradle的知识,后面我们还会详细讲解,这里要说明的是,代码中导出充斥着这样的判断,将会是代码很难维护,通常情况下我们会顶一个工具类,完成日志的输出。
Log有个比较糟糕的地方在于只能输出字符串,功能相对比较弱鸡。我们可以采用第三方的类库完成日志输入,比如说com.orhanobut:logger。
我们可以通过Project Structure引入com.orhanobut:logger,如下图所示:
也可以直接在gralde加入引用,引用成功后,我可以可以使用Logger输出日志,代码如下所示:
Button logButton = findViewById(R.id.logButton); logButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(BuildConfig.SHOW_LOG){ Logger.addLogAdapter(new AndroidLogAdapter()); // 初始化Logger Logger.d("debug"); Logger.e("error"); Logger.w("warning"); Logger.v("verbose"); Logger.i("information"); Logger.wtf("wtf!!!!"); } } }); |
输出如下图所示:
关于com.orhanobut:logger更详细的介绍,同学们可以自行在百度搜索学习。
(张伟:2018年9月13日)
(转载时请注明来源)