android 开发常用日志Log类及头条号 / 达人科技的MLog 介绍

Android的调试技巧包括熟练使用Android中的日志API,自定义Android日志框架,通过gradle配置调试日志,Android Studio的调试技巧等等。


android 开发常用日志类之Log类:android.util.Log.java

其中tagmessage分别是两个String.android开发帮助文档中来看,tagmessage的定义分别是: tagUsed to identify the source of a log message. Itusually identifies the class or activity where the log call occurs. msgThe message you would like logged. 可看出tag用来标记log消息的源头的。而message则是这条log的内容。


通过这种android自身Log API打印日志的方式,是最常见的一种打印日志的,调试代码的方式,基本上所有的项目中你可能都会遇到这种日志代码。


//java日志类
String TAG = "MainActivit";
System.out.println("普通日志Info");    
System.err.println("错误日志Info");    
//android 日志类
Log.e("TAG","错误信息");
Log.w("TAG","警告信息");
Log.i("TAG","普通信息");
Log.d("TAG","调试信息");
Log.d("TAG","无用信息");     //经常被程序猿当作注释用

可以直接在ide工具中查看日志。如androidStuido或eclipse


可以在ddms工具中查看日志。








android 开发常用日志类之MLog类:

github地址:https://github.com/yipianfengye/MLog  (个人建议:使用时下载源码方便根据自己需要进一步调整)

前面我们发现使用Android原生的Log API打印的日志格式比较简陋,那么可不可以定制化的显示一些友好型的日志信息呢?答案是肯定的,github地址作者介绍了一个自定义的日志框架MLog

作者是这么描述的:

MLog

这是一个建议的日志框架,主要参考了logger日志框架的实现方式;

  • 在build.gradle中引用MLog框架

    
    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
    compile 'com.yipianfengye:MLog:1.0.0'
    }
    
  • 在自定义的Application的onCreate方法中初始化MLog框架


/**
 * Created by liuchao on 2016/1/26.
 */
public class MApplication extends Application{

    @Override
    public void onCreate() {
        super.onCreate();
        MLog.init(true);

    }
}
  • 在代码中使用MLog框架

fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                MLog.i("测试MLog框架!!!");
            }
        });




我的调用如下:

public class MainActivity extends AppCompatActivity {
    private String TAG ="MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        MLog.v(TAG, "this is a verbose log!!!");
        MLog.d(TAG, "this is a debug log!!!");
        MLog.i(TAG, "this is a info log!!!");
        MLog.w(TAG, "this is a warning log!!!");
        MLog.e(TAG, "this is a error log!!!");

    }
}
 
我的app类:
package czg.myapplication;

import android.app.Application;

import com.example.aaron.library.MLog;

/**
 * Created by Administrator on 2016/7/19.
 */
public class CzgApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        MLog.init(true);
    }
}

AndroidManifest.xml中CzgApp的注册情况如下:
 
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="czg.myapplication">

    <application
        android:name=".CzgApp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
在AndroidMoitor中打印的日志格式和内容:



这样我们在点击日志信息的时候就能够跳转到这条日志的代码打印位置,是不是很方便?而且如果觉得日志格式不是很好的话,还可以定制化展示奥。

作者提供图如下:(由于我没有这方面的需要,也就没有进一步研究,如果有需要耍酷的同学自己去研究吧)



大多时候我们的App都有测试环境和正式环境两种环境的,当切换环境的时候要求我们在测试环境打印日志,则正式环境屏蔽日志,通过代码也可以实现,但是比较麻烦,有没有一个比较简单的方法呢?答案是肯定的,可以通过配置gradle的方式配置在测试环境中打印日志,在正式环境中屏蔽日志打印操作。gradle中配置正式测试打印框架我们知道在android开发过程中为了调试代码经常在代码中添加一些日志信息,但是正式环境是不需要这些日志信息的,而且过得日志打印操作也会对App的性能有影响。一个比较好的办法就是在App的测试环境中打印日志信息,在正式环境中屏蔽日志信息,那么如何实现呢?通过代码么?通过代码也是可以实现的,但是这样显得太原始了,其实android studio的gradle插件已经提供了这样的功能。那么如何通过gradle配置日志打印信息呢?


buildTypes {
    debug {
        // 显示Log
        buildConfigField "boolean", "LOG_DEBUG", "true"
        //混淆
        minifyEnabled false
        //Zipalign优化
        zipAlignEnabled true
        // 移除无用的resource文件
        shrinkResources true
        //加载默认混淆配置文件
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //签名
        signingConfig signingConfigs.debug
    }
    release {
        // 不显示Log
        buildConfigField "boolean", "LOG_DEBUG", "false"
        //混淆
        minifyEnabled true
        //Zipalign优化
        zipAlignEnabled true
        // 移除无用的resource文件
        shrinkResources true
        //加载默认混淆配置文件
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //签名
        signingConfig signingConfigs.relealse
    }
}
在android studio的module的gradle配置文件中,在buildTypes节点下可以配置自定义参数,这里我们在debug版本中定义LOG_DEBUG为true,在release版本中定义LOG_DEBUG为false。这样在编译的时候就会在gradle的编译类BuildConfig中生成成员变量: LOG_DEBUG

/*** 在Application的onCreate方法中初始化MLog日志框架* 并根据apk环境判断是否显示日志信息*/if (BuildConfig.LOG_DEBUG == true) {MLog.init(true);} else {MLog.init(false);}


我们实现的MLog框架的init方法若传入的值为true,则表示执行日志打印操作,也就是可以显示日志信息。若传入的值为false,则表示不执行日志打印操作,也就是不显示日志信息。这样我们就实现了在测试环境打印日志,在正式环境中屏蔽日志的操作。






参考文献:Android实用调试技巧



作者:头条号 / 达人科技
链接:http://toutiao.com/a6308879550420123905/














  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这个错误信息是由于 MySQL 找不到一个有效的检查点 (checkpoint) 导致的。在 MySQL 中,检查点是一个内部数据结构,用于记录数据库的状态,防止在恢复数据库时出现数据丢失。 当 MySQL 启动时,它会检查最后一个检查点,并从该检查点开始恢复数据。如果 MySQL 找不到最后一个检查点,或者找到的检查点已经过时或已损坏,则会出现类似 “Ignoring the redo log due to missing MLOG_CHECKPOINT” 的错误信息。 解决这个问题的方法是尝试恢复数据库。您可以使用 `mysqlbinlog` 命令来查看 MySQL 重做日志文件,并尝试手动恢复数据。 具体步骤如下: 1. 找到 MySQL 重做日志文件的位置。在 MySQL 配置文件中查找 `datadir` 参数,该参数指定了 MySQL 数据目录的位置。在该目录下,找到名为 `ib_logfile0` 和 `ib_logfile1` 的文件,这些文件就是 MySQL 重做日志文件。 2. 备份 MySQL 数据库。在执行任何恢复操作之前,务必备份数据库,以避免数据丢失。 3. 将重做日志文件转换为可读格式。使用以下命令将重做日志文件转换为可读格式: ```shell mysqlbinlog --start-position=<checkpoint_position> --stop-position=<end_position> <logfile> > <output_file> ``` 其中,`<checkpoint_position>` 是检查点的位置,可以在错误信息中找到;`<end_position>` 是重做日志文件的结尾位置,可以通过查看文件大小来确定;`<logfile>` 是重做日志文件的路径;`<output_file>` 是输出文件的路径。 4. 手动恢复数据。根据输出文件中的信息,手动恢复数据。这可能需要一些 MySQL 知识和经验。 5. 重启 MySQL 服务。在完成恢复操作后,重启 MySQL 服务,并确保一切正常。 需要注意的是,手动恢复数据有一定的风险,可能会导致数据丢失或不一致。因此,在进行恢复操作之前,请务必备份数据库,并确保您知道自己在做什么。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牵手生活

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值