Android-本篇依赖引用
旧版的依赖也可以使用,但是没有可日志过大时分包存储的功能
implementation 'org.slf4j:slf4j-api:1.7.25'
implementation 'com.github.tony19:logback-android:2.0.0'
适用范围
- 车载平板
- 电视
- 非上架商场的项目
- 等… (我目前操作最多的时这3款)
SLF4J使用介绍
简单轻便的日志管理系统, 一般情况下slf4j都会和log4j,logback等日志框架一起使用。
配置一次后,后续可直接CV搬运,改项目包名即可。
上手代码
lockback.xml存入assets文件夹下
<?xml version="1.0" encoding="UTF-8"?>
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration debug="false">
<!-- 日志保存路径 -->
<property name="PATH" value="你的项目存储日志路径"/>
<!-- 日志文件名称前缀 -->
<property name="FILENAME_PREFIX" value="log"/>
<!-- 日志历史天数 -->
<property name="MAX_HISTORY" value="7"/>
<!-- 同前缀(所有分包)的日志文件总大小-->
<property name="TOTAL_SIZE_CAP" value="10MB"/>
<!-- 单个文件最大值-->
<property name="MAX_FILE_SIZE" value="5MB"/>
<!-- 控制台输出日志 -->
<appender name="LOGCAT" class="ch.qos.logback.classic.android.LogcatAppender">
<!-- %d:日期, %thread:线程名, %-5level:级别从左显示5个字符宽度, %msg:日志消息, %n:换行符 -->
<encoder charset="UTF-8">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
</Pattern>
</encoder>
</appender>
<!-- 全局输出日志 -->
<appender name="ERROR"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 如果是 true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低,默认是 false -->
<prudent>false</prudent>
<!-- 周期性配置 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>
${PATH}/${FILENAME_PREFIX}_error.%d{yyyy-MM-dd}_%i.log
</fileNamePattern>
<maxHistory>${MAX_HISTORY}</maxHistory>
<!-- 当同名的所有文件大小大于totalSizeCap时会删除该同名文件日期最早的文件 -->
<totalSizeCap>${TOTAL_SIZE_CAP}</totalSizeCap>
<!-- 是否开APP时删日志 -->
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- 每个文件的大小,如果超过则生成新的文件 -->
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<!-- %d:日期, %thread:线程名, %-5level:级别从左显示5个字符宽度, %msg:日志消息, %n:换行符 -->
<encoder charset="UTF-8">
<Pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level - %msg%n
</Pattern>
</encoder>
</appender>
<logger name="error">
<appender-ref ref="ERROR"/>
</logger>
<root level="ALL">
<appender-ref ref="LOGCAT"/>
</root>
</configuration>
Log类输出日志
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
1. 日志
*/
public final class Log {
private static final Logger sLog = LoggerFactory.getLogger("error");
public static void i(String content) {
sLog.info(content);
}
public static void d(String content) {
sLog.debug(content);
}
public static void e(String content) {
sLog.error(content);
}
public static void e(Throwable throwable) {
sLog.error("", throwable);
}
}
简单示例:
1.输出异常
try {
System.out.println(1 / 0);
} catch (Exception e) {
Log.e(e);//这个可以输出至文件
e.printStackTrace();//这只能输出到控制台
}
2.你的Application extends Application implements Thread.UncaughtExceptionHandler
@Override
public void onCreate() {
super.onCreate();
if (!BuildConfig.DEBUG) {
Thread.setDefaultUncaughtExceptionHandler(this);
}
}
@Override
public void uncaughtException(@NonNull Thread thread, @NonNull Throwable throwable) {
// 打印闪退时的日志
Log.e(throwable);
}
使用讲解
- ch.qos.logback.core.rolling.TimeBasedRollingPolicy类
图中的红色框框的为可配置的方法,使用方法如下:
-
setFileNamePattern(String x)
设置日志名称,旧版依赖<fileNamePattern的标签无法打印_%i的分包日志,新版可以。如果以下的条件未设置完全,会在同一个日志文件内输出,这个方法继承自其父类RollingPolicyBase.class -
setMaxHistory(int x) 设置条件:最大存储日期 ,如果不设置:默认为0
-
setCleanHistoryOnStart(boolean x) 设置是否在开启APP时清除条件限制以外的日志
-
setTotalSizeCap(FileSize x) 设置条件:所有文件大小
-
setTimeBasedFileNamingAndTriggeringPolicy(TimeBasedFileNamingAndTriggeringPolicy x)设置条件:每个文件的大小
- ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP 类
- setMaxFileSize(FileSize x) 设置条件:每个文件的大小。
**
愿各位大佬的代码永无BUG,愿我的代码向大佬看齐
**