视频教程,建议采用超清模式观看

在Android中一般都用Log输出日志,常见的有5个不同的级别

  • Log.v()
  • Log.d()
  • Log.i()
  • Log.w()
  • Log.e()
当然很多程序员还比较习惯用System.out.println() 去输出日志,这种方式其实没有任何优势可言。建议大家放弃。

输出日志很简单,怎么控制日志的输出就值得研究下了,日志是用来调试程序的,当程序发布的时候日志就变得一无是处了。所以输出日志的原则就是:
程序开发阶段允许输出日志,发布阶段不允许打印日志。
如何去控制呢?如果你在上线前手动的删除所有日志,这个工作量就是很大了,一般情况下我们都是创建一个LogUtils工具类
public class LogUtils {
public static final boolean DEBUG=true; public static void i(String tag,String msg){
if(DEBUG) {
Log.i(tag, msg);
}
}
}

用LogUtils中的方法去输出日志

 LogUtils.i("MainActivity","info");

这样我们就可以通过LogUtils中DEBUG变量去控制日志的输出,当程序调试的时候我们把这个值改为true,程序发布了,就把这个值改成false。这样就可以实现我们一开始的需求。


然而,这样的话,我们还需要在发布前夕手动的去改代码,能不能在发布前不改代码呢?这时候我们就要借助Gradle了,Android Studio集成了Gradle,这一点非常棒.我们需要打开app/build.gradle这个文件,做一个配置
    buildTypes {
debug{ // 开发阶段
buildConfigField "String", "API_URL","\"http://test.example.com/api\"" //定义了字符串变量
buildConfigField "boolean", "LOG_CALLS", "true" // 定义了boolean变量 true }
release { // 发布了
buildConfigField "boolean", "LOG_CALLS", "false"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}

我们可以在buildType中配置一些全局变量,可以是String类型如“API_URL”,也可以是boolean,这里我们用到的就是LOG_CALLS这一个变量,注意一点debug{
...}
这个指的是程序开发阶段,release{ } 指的是程序发布阶段。我们在开发和发布阶段分别定义了对应不同值的LOG_CALLS,接下来我们就可以在LogUtils中使用这个全局变量了。

public class LogUtils {
public static final boolean DEBUG=BuildConfig.LOG_CALLS; public static void i(String tag,String msg){
if(DEBUG) {
Log.i(tag, msg);
}
}
}

其中BuildConfig.LOG_CALLS就是我们在上面定义的变量,这个变量在开发阶段是true,发布阶段自动的就变成了false。我们这样就干了一个一劳永逸的事了。

Android教程-02 在程序中输出Log的更多相关文章

  1. 在 ASP.NET MVC Web 应用程序中输出 RSS Feeds

    RSS全称Really Simple Syndication.一些更新频率较高的网站可以通过RSS让订阅者快速获取更新信息.RSS文档需遵守XML规范的,其中必需包含标题.链接.描述信息,还可以包含发 ...

  2. ZT Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

    Android布局]在程序中设置android:gravity 和 android:layout_Gravity属性 分类: [Android基础] 2011-04-19 16:06 54739人阅读 ...

  3. java程序中输出console的日志到文本

    http://blog.sina.com.cn/s/blog_76a8411a01010u2h.html 首先:当我们引入data-integration\lib文件夹下的所有jar包后 运行java ...

  4. CocoStudio基础教程(3)在程序中处理cocoStudio导出动画

    1.概述 使用cocoStudio可以方便的制作动画,接下来的工作就是在我们的程序中使用制作的动画.这篇中,我将使用程序将两个动画连接起来 2.关联到项目 运行脚本创建我们的项目,将导出的动画.UI放 ...

  5. 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性

    在进行UI布局的时候,可能常常会用到 android:gravity  和 android:layout_Gravity 这两个属性. 关于这两个属性的差别,网上已经有许多人进行了说明,这边再简单说一 ...

  6. 【Android布局】在程序中设置android:gravity 和 android:layout_Gravity属性——位置设置偏向

    LinearLayout有两个非常相似的属性: android:gravity与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中内 ...

  7. 我的手机华为荣耀7,运行android程序不输出Log

    解决方法:1 进入手机拨号界面2 输入*#*#2846579#*#*3 输入完毕后自动跳转到<工程菜单>界面4 依次选择后台设置-->LOG设置-->在此可以看见一些列关于LO ...

  8. Android:调用其他程序中的activity和Permission Denial: starting Intent 错误解决办法

    今天想调试多个task中栈的情况,在测试程序中调用另一个程序的activity, 代码片段如下: btnStartX=(Button)findViewById(R.id.btnStartX); btn ...

  9. 程序中编写log日志

    public string logFile; ; private Stream s = null; StreamWriter sw = null; /// <summary> /// 用l ...

随机推荐

  1. 洛谷P1263 宫廷守卫

    P1263 宫廷守卫 题目描述 从前有一个王国,这个王国的城堡是一个矩形,被分为M×N个方格.一些方格是墙,而另一些是空地.这个王国的国王在城堡里设了一些陷阱,每个陷阱占据一块空地. 一天,国王决定在 ...

  2. linux系统RabbitMQ启动错误记录

    安装并配置好RabbitMq之后终端执行rabbitmq-server报错 试了网上的各种方法也无济于事 最后发现可能是因为访问权限的问题(并不确定) 解决方法:sudo rabbitmq-serve ...

  3. 第一次接触node.JS

    1.初识node.js node.js平时可以关注: 一.nodejs.org看看nodejs的版本升级,新特性的加入,重要bug的修复等 二.www.npmjs.com模块社区,看他人源代码,省力 ...

  4. Hdu 3603

    Coach Yehr’s punishment Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  5. Ubuntu小知识:更改主机名

    Linux主机名是在安装Linux操作系统的过程中设定的,并作为网络中的某一台主机的唯一标志,但是在安装好Linux系统后,如果想修改主机名,该怎么办呢?本文介绍基于Ubuntu Desktop 9. ...

  6. ObjectIntputStream / ObjectOutputStream 类

    使用 ObjectInputStream 类 ObjectOutputStream类 将对象整体 读 / 写文件中: [读写对象] 1. ObjectInputStream类 (1)基本概念 java ...

  7. php各种字符串截取

    各种字符串截取.php <?php /** * 字符串截取,支持中文和其他编码 * @param [string] $str [字符串] * @param integer $start [起始位 ...

  8. Sentinel 1.5.0 正式发布,引入 Reactive 支持

    近日,流控降级组件 Sentinel 的又一个里程碑版本 1.5.0 正式发布. 该版本引入 Reactive 的支持,并提供多项新特性与改进.从 1.5.0 版本开始,Sentinel 仅支持 JD ...

  9. 廖雪峰Python总结4

    面向对象编程 将计算机程序视为一系列的命令集合.包含: 数据 操作数据的函数 Python中,所有的数据类型都可以视为对象. 面向对象特点:封装,继承,多态. 类的函数和普通函数:类的第一个参数永远是 ...

  10. PyCharm2019 永久激活

    <!-- 2019激活码 2019-06-21新更新 --> D00F1BDTGF-eyJsaWNlbnNlSWQiOiJEMDBGMUJEVEdGIiwibGljZW5zZWVOYW1l ...