Skip to content

dzl888/Logger

Repository files navigation

[TOC]

一、日志库描述

项目地址:https://github.com/dzl888/Logger.git

结合了开源框架TimberLogback各自的优点。

  1. 使用Timber进行logcat控制台的日志输出,示例如下:

    Timber.i("开始登录")
    Timber.w("登录失败")
    Timber.e(Exception("参数错误"))
    Timber.e(Exception(), "写文件时出现异常")

    使用方式与系统的Log类一样,优点是不需要tag参数,默认会以当前类名作为TAG,也可以自定义tag,如下:

    Timber.tag("MyTag").i("Hello")
  2. 使用Logback进行日志文件保存,并且使用Timber对Logback进行了封装,统一了使用方式,加个 f 即可,示例如下:

    Timber.fi("开始登录")
    Timber.fw("登录失败")
    Timber.fe("无可用网络")
    Timber.fe(Exception(), "内存不足")

    带 f 的日志会同时输出到控制台和文件, 输出到文件的内容示例如下:

08:14:09 [main] INFO MainActivity:开始登录 10:35:54 [main] WARN MainActivity:登录失败 ```

输出格式为: 日志发生的时间、所在线程、日志级别、TAG、日志内容



fe级别的日志会保存在一个bug.txt文件中, 其他 f 级别的会保存在log.txt文件中,而且会按日期保存每天的文件, 保留30天, 文件总大小限制为600M.

保存位置如下:

	- 普通日志:/sdcard/Android/data/应用包名/files/Doucuments/logs/
	- BUG日志:/sdcard/Android/data/应用包名/files/Doucuments/bugs/

保存位置优点: 兼容所有设备,不需要读写权限, 缺点:应用卸载时文件就没有了
  1. 调试模式时输出控制台日志, 正式打包后不输出控制台日志(error级别的日志不受此控制,始终输出), 写文件的日志时,控制台不输出日志,但是日志内容还是会写到文件上.

  2. 在高版本的Android系统中, 虽然在Locat控制台中看不到release版本的应用的进程(模拟器上高版本也能看到进程, 可能是有root权限),但是log还是可以正常输出的, 我们可以直接使用TAG进行过滤日志 , release版本时,日志开关默认是关的, 可通过如下方法打开

    Timber.setLogSwitch(true)   // 设置日志开关为开状态(当天有效,第二天自动变成关),注:如果是运行的是Debug版本,则即使这里设置为false,log也会输出
    Timber.getLogSwitch()       // 获取当前日志开关状态
    Timber.logToggle()          // 切换日志开关,开变成关,关变成开(当天有效,第二天自动变成关)

    release模式也可以看到进程, 配置如下:

    android {
        
        buildTypes {
            release {
                debuggable true
            }
        }
    }

    这样配置后,打包release的app也能在logcat看到进程, 但是跟Debug版本没什么区别, 只不过是有一个正式的签名而已, BuildConfig.DEBUG的值也是true, 所以最好不要这么搞。

  3. 版本最低兼容: API 15(Android4.0.3)

二、使用示例

1、初始化,以及保存未捕捉异常

class App: Application() {

    override fun onCreate() {
        super.onCreate()
        Timber.init(this, BuildConfig::class.java) // 注意,这里的BuildConfig要使用自己应用包名下的,不能用其他包名下的
        Thread.setDefaultUncaughtExceptionHandler { t, e ->
            Timber.fe(e, "未捕捉的异常")
        }
    }
    
}

2、基本使用

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun printLog(view: View) {
        if (Timber.getLogSwitch() || BuildConfig.DEBUG) { // 获取当前日志开关状态
            Timber.i("当前Log开关是开的,可以输出所有级别日志")
        } else {
            Timber.e("当前log开关是关的,只能输出error级别日志")
        }

        // 输出日志到控制台
        Timber.v("vvvvv")
        Timber.d("ddddd")
        Timber.i("iiiii")
        Timber.w("wwwww")
        Timber.e("eeeee")

        // 同时输出日志到控制台和文件
        Timber.fi("Hello")
        Timber.fe("我是error异常,会写到bug文件中")
        Timber.fe(Exception("惨了"))
        Timber.fe(Exception("又出异常了"), "不慌,没事")

        // Timber.setLogSwitch(true)   // 设置日志开关为开状态(当天有效,第二天自动变成关)
        Timber.logToggle() // 切换日志开关,开变成关,关变成开(当天有效,第二天自动变成关)
    }
}

三、依赖方式

1、使用dependencies的方式

  1. 在module的build.gradle中添加依赖

    repositories {
        maven { url 'https://192.168.1.251:8081/content/repositories/android_repositories/'}
    }
    
    dependencies {
        implementation 'cn.dazhou.android.log:timber:2.0.8'
    }
  2. 初始化Timber

    Timber.init(application, BuildConfig::class.java) // 建议在Application中初始化. 注意,这里的BuildConfig要使用自己应用包名下的,不能用其他包名下的

2、使用导入aar文件到libs目录的方式

  1. 把aar放入libs目录

  2. 导出的aar没有依赖传递功能,所以除了添加aar之外还要添加日志库所依赖的库

    implementation fileTree(dir: "libs", include: ["*.jar", "*.aar"])
    implementation 'org.slf4j:slf4j-api:1.7.30'
    implementation 'com.github.tony19:logback-android:2.0.0'
  3. 初始化Timber

    Timber.init(application, BuildConfig::class.java) // 建议在Application中初始化. 注意,这里的BuildConfig要使用自己应用包名下的,不能用其他包名下的

四、Bug

此日志框架有一个Bug,就是当天的日志命名是不带日期的,到了第二天才会加上日期,比如文件为bug.txt,这代表是当天的bug文件,第二天如果出现一个新的bug,则bug.txt会被保存为bug_2020_12_08.txt,然后创建一个新的bug.txt保存当天的bug,以此类推。这样的话就会有一个问题,如果第二天不出现bug了,则bug.txt中保存的bug实际为第一天保存的,所以我们没办法区分bug.txt中的bug具体是哪一天的了!!现在的一个解决方案就是在每一个日志输出的时候都带上日期,这样在打开bug.txt看里面的日志时,就能看到日志是什么哪个日期产生的。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published