使用Timber
源码地址:https://github.com/JakeWharton/timber
在build.grade中引入Timber:
implementation 'com.jakewharton.timber:timber:4.7.0'
在自定义Application中:
if (isDebug()) {
Timber.plant(new DebugTree());
} else {
Timber.plant(new ReleaseTree());
}
创建新的类
public class DebugTree extends Timber.DebugTree {
@Override
protected void log(int priority, String tag, String message, Throwable t) {
if (tag != null) {
String threadName = Thread.currentThread().getName();
tag = "<" + threadName + "> " + tag;
}
super.log(priority, tag, message, t);
}
@Override
protected String createStackElementTag(StackTraceElement element) {
return super.createStackElementTag(element) + "(Line " + element.getLineNumber() + ")"; //日志显示行号
}
}
public class ReleaseTree extends Timber.DebugTree {
@Override
protected void log(int priority, String tag, String message, Throwable t) {
//
String CacheDiaPath = context.getCacheDir().toString();
if (TextUtils.isEmpty(CacheDiaPath)) {
return;
}
File file = new File(CacheDiaPath + "/log.txt");
Log.v("dyp", "file.path:" + file.getAbsolutePath() + ",message:" + message);
FileWriter writer = null;
BufferedWriter bufferedWriter = null;
try {
writer = new FileWriter(file);
bufferedWriter = new BufferedWriter(writer);
bufferedWriter.write(message);
bufferedWriter.flush();
} catch (IOException e) {
Log.v("dyp", "存储文件失败");
e.printStackTrace();
} finally {
if (bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
以上两个,一个是调试版本使用,一个是正式版本使用。还有一些其他的树,可以自己写一下,如果控制打印等级,也可以加上去。
之后你就会觉得很麻烦,日志越来越多,肯定要有管理,打印等级也要控制一下,即便在等级低的时候,也要记录日志,因为有很多日志要在有异常的时候打印出来,但是又不能打印一两句话,所以要把上下文打印出来,这样就麻烦很多了。
先说管理吧
logback-android
地址:https://github.com/tony19/logback-android 点击打开链接
In app/build.gradle
, add the following dependencies:
dependencies {
compile 'org.slf4j:slf4j-api:1.7.25'
compile 'com.github.tony19:logback-android:1.1.1-11'
}
Create app/src/main/assets/logback.xml
containing:
<configuration>
<appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
<tagEncoder>
<pattern>%logger{12}</pattern>
</tagEncoder>
<encoder>
<pattern>[%-20thread] %msg</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="logcat" />
</root>
</configuration>