文章目录
  1. 1. 特点
  2. 2. 依赖
  3. 3. 配置
    1. 3.1. 初始化
    2. 3.2. init(context)
    3. 3.3. setPackagedLevel(int)
    4. 3.4. setDebug(boolean)
    5. 3.5. writeToFile(boolean)
    6. 3.6. setLogLevelsForFile(List)
    7. 3.7. setLogDir(String)
    8. 3.8. setLogPrefix(String)
    9. 3.9. setLogSegment(LogSegment)
    10. 3.10. setCharset(String)
    11. 3.11. setTimeFormat(String)
    12. 3.12. setZoneOffset(ZoneOffset)
  4. 4. 用法
    1. 4.1. JLog.v(String)
    2. 4.2. JLog.v(TAG, String)
    3. 4.3. JLog.json(json)
    4. 4.4. 混淆
    5. 4.5. 运行环境信息
  5. 5. License
  6. 6. 分享与支持

来源:JiongBull’s Blog
微博:@JiongBull
GitHub:JiongBull

jlog是一款针对Android开发者的日志工具。

orhanobutloggerZhaoKaiQiangKLogJakeWhartontimber给了我灵感和参考,感谢他们的开源精神。

再结合一些工作上的经验,就撸出了这个库。

希望你会喜欢它。( ^_^ )

特点

  • 兼容android logcat,VERBOSEDEBUGINFOWARNERRORWTF全都有,一个都不能少。
  • JSON模式下,jlog会把json内容格式化,便于理解。
  • jlog提供了调用者的类、方法和行号信息,甚至可以从控制台直接跳转到源文件。
  • 简化了logcat,jlog使用调用者的类名作TAG(当然也支持自定义TAG)。
  • 突破了logcat的4000字长度限制。
  • jlog可以把日志输出到指定的目录和文件中。
  • 你可以决定哪些级别的日志写入文件中。
  • 在日志文件的顶部,jlog提供了很多有用的运行环境相关的信息,比如操作系统信息设备信息应用信息
  • jlog针对写入文件的日志做了格式化,同时提供了足够的信息方便分析,例如时间日志等级调用位置
  • 混淆后也能工作正常(获取调用位置)。
  • 支持配置日志文件编码,例如UTF-8GBK
  • 支持设置日志文件的时间格式。
  • 支持设置日志文件的时区(便于调试其他时区的设备)。
  • 日志按照时间切片写入到不同的文件中,默认是24小时,文件名诸如2016-01-19.log,你也可以指定前缀时间切片,比如用户标识_2016-01-19_2021.log
  • 如果你需要把日志同步上传到七牛云存储,可以考虑使用这个项目jlog-qiniu

jlog sample

依赖

1
2
3
dependencies {
compile 'com.jiongbull:jlog:1.0.4'
}

配置

初始化

建议在你的application的onCreate()方法里初始化jlog的全局配置,设置一次终身受用。

1
2
3
4
5
6
7
8
9
public class RootApp extends Application {

@Override
public void onCreate() {
super.onCreate();
JLog.init(this)
.setDebug(BuildConfig.DEBUG);
}
}

所有的配置都保存在JLog类里。你可以通过getSettings()来获取配置,它会返回一个Settings对象。修改Settings对象后再用setSettings()设置,下次使用时就会生效了。

记得把下面的代码添加到你的混淆文件中(例如:proguard-rules.pro)。

1
2
-keepattributes SourceFile, LineNumberTable
-keep class com.jiongbull.jlog.** { *; }

如果你的应用的’targetSdkVersion’是23+,不要忘记在闪屏页或首页申请’android.permission.WRITE_EXTERNAL_STORAG’权限。
你可以参考这篇文章,在Android 6.0 设备上动态获取权限.

init(context)

建议使用application context。

1
JLog.init(this);

setPackagedLevel(int)

如果需要再封装jlog,请设置封装的层级,否则jlog不能获取调用者的信息.

1
2
JLog.init(this)
.setPackagedLevel(1);

jlog's stack structure

setDebug(boolean)

默认是true,日志会输出到控制台中。在发布版本的时候请把这个变量设置为false。

1
2
JLog.init(this)
.setDebug(false);

1
2
JLog.init(this)
.setDebug(BuildConfig.DEBUG);

writeToFile(boolean)

日志开关,如果是true,日志会输出到文件中,默认是false。

1
2
JLog.init(this)
.writeToFile(true);

setLogLevelsForFile(List)

这个方法决定了哪些级别的日志可以输出到文件中。默认的日志级别是LogLevel.ERRORLogLevel.WTF

1
2
3
4
5
6
List<LogLevel> logLevels = new ArrayList<>();
logLevels.add(LogLevel.ERROR);
logLevels.add(LogLevel.JSON);
JLog.init(this)
.writeToFile(true)
.setLogLevelsForFile(logLevels);

setLogDir(String)

配置日志保存的目录名称,日志目录是位于sd卡中,默认名称是jlog.

default directory

可以使用应用的名称作为日志目录名。

1
2
3
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name));

app directory

子目录当然也支持啦,可以使用一些唯一标识作为子目录的名称,比如用户标识。

1
2
3
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name) + File.separator + "JiongBull");

app sub directory

setLogPrefix(String)

如果不想使用子目录,你或许可以试一试日志文件的前缀功能。

1
2
3
4
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setLogPrefix("JiongBull");

prefix file

setLogSegment(LogSegment)

日志按照时间切片写入到不同的文件中,默认是24小时,文件名诸如2016-01-19.log,如果设置为LogSegment.ONE_HOUR,文件名就会变成诸如2016-01-19_0203.log那样了,表示文件里记录的是2:00到3:00的日志。

1
2
3
4
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setLogSegment(LogSegment.ONE_HOUR);

time segment

setCharset(String)

配置日志文件的编码格式,默认是UTF-8

1
2
3
4
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setCharset("GBK");

setTimeFormat(String)

默认的时间格式是yyyy-MM-dd HH:mm:ss,你可以使用这个方法让日志更容易理解。

1
2
3
4
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setTimeFormat("yyyy年MM月dd日 HH时mm分ss秒");

time format

setZoneOffset(ZoneOffset)

我们可以指定文件里日志时间的时区,而不受用户位置的影响,这样会更容易定位问题,默认是ZoneOffset.P0800(+0800),表示“北京时间”。

1
2
3
4
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setZoneOffset(ZoneOffset.P0800);

用法

JLog.v(String)

jlog默认会使用调用者的类名作TAG。

default tag

JLog.v(TAG, String)

你也可以自己指定TAG。

custom tag

JLog.json(json)

jlog会把json内容格式化,便于理解。

json

混淆

jlog在混淆模式下依旧工作正常。

logs in console

logs in file

运行环境信息

在日志文件的顶部,jlog提供了很多有用的运行环境相关的信息,比如操作系统信息设备信息应用信息

environment info en

environment info zh

License

1
2
3
4
5
6
7
8
9
10
11
12
13
Copyright JiongBull 2016

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

分享与支持

  • 如果这篇文章对你有帮助,请分享下面的链接让更多人受益。
  • 更多支持,请点这里
文章目录
  1. 1. 特点
  2. 2. 依赖
  3. 3. 配置
    1. 3.1. 初始化
    2. 3.2. init(context)
    3. 3.3. setPackagedLevel(int)
    4. 3.4. setDebug(boolean)
    5. 3.5. writeToFile(boolean)
    6. 3.6. setLogLevelsForFile(List)
    7. 3.7. setLogDir(String)
    8. 3.8. setLogPrefix(String)
    9. 3.9. setLogSegment(LogSegment)
    10. 3.10. setCharset(String)
    11. 3.11. setTimeFormat(String)
    12. 3.12. setZoneOffset(ZoneOffset)
  4. 4. 用法
    1. 4.1. JLog.v(String)
    2. 4.2. JLog.v(TAG, String)
    3. 4.3. JLog.json(json)
    4. 4.4. 混淆
    5. 4.5. 运行环境信息
  5. 5. License
  6. 6. 分享与支持