jlog是一款针对Android开发者的日志工具。
orhanobut的logger,ZhaoKaiQiang的KLog和JakeWharton的timber给了我灵感和参考,感谢他们的开源精神。
再结合一些工作上的经验,就撸出了这个库。
希望你会喜欢它。( ^_^ )
- 兼容android logcat,
VERBOSE
、DEBUG
、INFO
、WARN
、ERROR
和WTF
全都有,一个都不能少 - 在
JSON
模式下,jlog会把json内容格式化,便于理解 - jlog提供了调用者的类、方法和行号信息,甚至可以从控制台直接跳转到源文件
- 简化了logcat,jlog使用调用者的类名作TAG(当然也支持自定义TAG)
- 突破了logcat的4000字长度限制
- jlog可以把日志输出到指定的目录和文件中
- 你可以决定哪些级别的日志写入文件中
- 在日志文件的顶部,jlog提供了很多有用的运行环境相关的信息,比如
操作系统信息
、设备信息
和应用信息
- jlog针对写入文件的日志做了格式化,同时提供了足够的信息方便分析,例如
时间
、日志等级
和调用位置
- 混淆后也能工作正常(获取调用位置)
- 支持配置日志文件编码,例如
UTF-8
,GBK
- 支持设置日志文件的时间格式
- 支持设置日志文件的时区(便于调试其他时区的设备)
- 日志按照时间切片写入到不同的文件中,默认是24小时,文件名诸如
2016-01-19.log
,你也可以指定前缀
和时间切片
,比如用户标识_2016-01-19_2021.log
- 如果你需要把日志同步上传到七牛云存储,可以考虑使用这个项目jlog-qiniu
dependencies {
compile 'com.jiongbull:jlog:1.0.4'
}
建议在你的application的onCreate()
方法里初始化jlog的全局配置,设置一次终身受用。
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
)。
-keepattributes SourceFile, LineNumberTable
-keep class com.jiongbull.jlog.** { *; }
如果你的应用的'targetSdkVersion'是23+,不要忘记在闪屏页或首页申请'android.permission.WRITE_EXTERNAL_STORAG'权限。 你可以参考这篇文章,在Android 6.0 设备上动态获取权限.
建议使用application context。
JLog.init(this);
默认是true,日志会输出到控制台中。在发布版本的时候请把这个变量设置为false。
JLog.init(this)
.setDebug(false);
或
JLog.init(this)
.setDebug(BuildConfig.DEBUG);
日志开关,如果是true,日志会输出到文件中,默认是false。
JLog.init(this)
.writeToFile(true);
这个方法决定了哪些级别的日志可以输出到文件中。默认的日志级别是LogLevel.ERROR
和LogLevel.WTF
。
List<LogLevel> logLevels = new ArrayList<>();
logLevels.add(LogLevel.ERROR);
logLevels.add(LogLevel.JSON);
JLog.init(this)
.writeToFile(true)
.setLogLevelsForFile(logLevels);
配置日志保存的目录名称,日志目录是位于sd卡中,默认名称是jlog
.
可以使用应用的名称作为日志目录名。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name));
子目录当然也支持啦,可以使用一些唯一标识作为子目录的名称,比如用户标识。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name) + File.separator + "JiongBull");
如果不想使用子目录,你或许可以试一试日志文件的前缀
功能。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setLogPrefix("JiongBull");
日志按照时间切片写入到不同的文件中,默认是24小时,文件名诸如2016-01-19.log
,如果设置为LogSegment.ONE_HOUR
,文件名就会变成诸如2016-01-19_0203.log
那样了,表示文件里记录的是2:00到3:00的日志。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setLogSegment(LogSegment.ONE_HOUR);
配置日志文件的编码格式,默认是UTF-8
。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setCharset("GBK");
默认的时间格式是yyyy-MM-dd HH:mm:ss
,你可以使用这个方法让日志更容易理解。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setTimeFormat("yyyy年MM月dd日 HH时mm分ss秒");
我们可以指定文件里日志时间的时区,而不受用户位置的影响,这样会更容易定位问题,默认是ZoneOffset.P0800
(+0800),表示“北京时间”。
JLog.init(this)
.writeToFile(true)
.setLogDir(getString(R.string.app_name))
.setZoneOffset(ZoneOffset.P0800);
jlog默认会使用调用者的类名作TAG。
你也可以自己指定TAG。
jlog会把json内容格式化,便于理解。
jlog在混淆模式下依旧工作正常。
在日志文件的顶部,jlog提供了很多有用的运行环境相关的信息,比如操作系统信息
、设备信息
和应用信息
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.