| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865 |
- package com.hgsoft.log;
- import android.content.Context;
- import android.text.TextUtils;
- import androidx.annotation.NonNull;
- import com.tencent.mars.xlog.Log;
- import net.lingala.zip4j.ZipFile;
- import net.lingala.zip4j.exception.ZipException;
- import java.io.File;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.List;
- import java.util.Locale;
- /**
- * 打印日志封装
- *
- * @author yinxueqin
- */
- public final class LogUtil {
- /**
- * 可以全局控制android.util.Log是否打印log日志
- */
- private static boolean isPrintLog = true;
- /**
- * 在某些机器上小于4000,小于2000
- */
- private static int logMaxLength = 1800;
- /**
- * 长度最好不超过 23 个字符
- */
- public static final String TAG = "-hgits-log";
- public static boolean xlogInitComplete = false;
- /**
- * 向外提供日志输出
- */
- private static LogInfo mLogInfo;
- /**
- * 初始化Xlog(默认方式(文件默认保存10天,不设置文件最大字节)
- * @param context 上下文
- * @param isDebugStatus 是否debug false:不是,true:是
- * @param consoleLogOpen 控制台是否打印
- * @param logFileNamePrefix 日志文件名前缀
- * @param releasePubKey release版本时需要密钥
- * @param needPrintSystemInfo 需要打印的系统信息
- */
- public static void initXlog(Context context, boolean isDebugStatus, boolean consoleLogOpen, @NonNull String logFileNamePrefix,
- @NonNull String releasePubKey, @NonNull String needPrintSystemInfo) {
- LogUtil.appenderFlush(false);
- LogUtil.appenderClose();
- MarsXLogInit.getInstance().setXlogOpenStatus(false);
- MarsXLogInit.getInstance().setDebugStatus(isDebugStatus);
- MarsXLogInit.getInstance().setConsoleLogOpen(consoleLogOpen);
- if (isDebugStatus) {
- MarsXLogInit.getInstance().setPUBKEY("");
- MarsXLogInit.getInstance().setLogFileNamePrefix("Debug_" + logFileNamePrefix);
- } else {
- MarsXLogInit.getInstance().setPUBKEY(releasePubKey);
- MarsXLogInit.getInstance().setLogFileNamePrefix("Release_" + logFileNamePrefix);
- }
- MarsXLogInit.getInstance().openXlog(context);
- LogUtil.ei(TAG, needPrintSystemInfo);
- LogUtil.appenderFlush(false);
- }
- /**
- * 初始化Xlog(默认方式(文件默认保存10天,不设置文件最大字节)
- * @param context 上下文
- * @param isDebugStatus 是否debug false:不是,true:是
- * @param consoleLogOpen 控制台是否打印
- * @param logFileNamePrefix 日志文件名前缀
- * @param releasePubKey release版本时需要密钥
- * @param needPrintSystemInfo 需要打印的系统信息
- * @param logFileSaveDays 文件保存天数,这个保存天数根据文件创建属性决定。最小1天,默认10天
- * @param logFileMaxSize 单个文件最大字节 0:表示不分割 单位字节
- */
- public static void initXlog(Context context, boolean isDebugStatus, boolean consoleLogOpen, @NonNull String logFileNamePrefix,
- @NonNull String releasePubKey, @NonNull String needPrintSystemInfo, int logFileSaveDays, long logFileMaxSize) {
- LogUtil.appenderFlush(false);
- LogUtil.appenderClose();
- MarsXLogInit.getInstance().setXlogOpenStatus(false);
- MarsXLogInit.getInstance().setDebugStatus(isDebugStatus);
- MarsXLogInit.getInstance().setConsoleLogOpen(consoleLogOpen);
- MarsXLogInit.getInstance().setLogFileSaveDays(logFileSaveDays);
- MarsXLogInit.getInstance().setLogFileMaxSize(logFileMaxSize);
- if (isDebugStatus) {
- MarsXLogInit.getInstance().setPUBKEY("");
- MarsXLogInit.getInstance().setLogFileNamePrefix("Debug_" + logFileNamePrefix);
- } else {
- MarsXLogInit.getInstance().setPUBKEY(releasePubKey);
- MarsXLogInit.getInstance().setLogFileNamePrefix("Release_" + logFileNamePrefix);
- }
- MarsXLogInit.getInstance().openXlog(context);
- LogUtil.ei(TAG, needPrintSystemInfo);
- LogUtil.appenderFlush(false);
- }
- public static void initXlogState(boolean state) {
- xlogInitComplete = state;
- }
- /**
- * 设置android原生日志打印是否可以打印
- *
- * @param isPrint true:可以,false:不可以
- */
- public static void setAndroidLogPrintConsoleLog(final boolean isPrint) {
- isPrintLog = isPrint;
- }
- /**
- * 设置android logcat最大打印长度,超出将自动分割
- * @param logMaxLength 一条日志最大长度
- */
- public static void setLogPrintMaxLength(final int logMaxLength) {
- LogUtil.logMaxLength = logMaxLength;
- }
- /**
- * 打印日志,级别为:LEVEL_VERBOSE
- *
- * @param msg 日志信息
- */
- public static void v(final String msg) {
- v(TAG, msg);
- }
- /**
- * 打印日志,级别为:LEVEL_VERBOSE
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void v(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogV(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.v(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_VERBOSE, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_DEBUG
- *
- * @param msg 日志信息
- */
- public static void d(final String msg) {
- d(TAG, msg);
- }
- /**
- * 打印日志,级别为:LEVEL_DEBUG
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void d(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogD(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.d(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_DEBUG, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_INFO
- *
- * @param msg 日志信息
- */
- public static void i(final String msg) {
- i(TAG, msg);
- }
- /**
- * 打印日志,级别为:LEVEL_INFO
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void i(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogI(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.i(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_INFO, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_INFO,有额外返回
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void ei(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogI(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.i(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_INFO, tagName + TAG, log);
- mLogInfo.log(LogLevel.LEVEL_EXTRA, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_WARNING
- *
- * @param msg 日志信息
- */
- public static void w(final String msg) {
- w(TAG, msg);
- }
- /**
- * 打印日志,级别为:LEVEL_WARNING
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void w(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogW(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.w(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_WARNING, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_WARNING,有额外返回
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void ew(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogW(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.w(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_WARNING, tagName + TAG, log);
- mLogInfo.log(LogLevel.LEVEL_EXTRA, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_ERROR
- *
- * @param msg 日志信息
- */
- public static void e(final String msg) {
- e(TAG, msg);
- }
- /**
- * 打印日志,级别为:LEVEL_ERROR
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void e(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogE(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.e(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_ERROR, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_ERROR,有额外返回
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void ee(final String tagName, final String msg) {
- if (!xlogInitComplete) {
- androidLogE(tagName, msg);
- return;
- }
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- Log.e(tagName + TAG, log);
- if (mLogInfo != null) {
- mLogInfo.log(LogLevel.LEVEL_ERROR, tagName + TAG, log);
- mLogInfo.log(LogLevel.LEVEL_EXTRA, tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_VERBOSE
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void androidLogV(final String tagName, final String msg) {
- if (isPrintLog) {
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- android.util.Log.v(tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_DEBUG
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void androidLogD(final String tagName, final String msg) {
- if (isPrintLog) {
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- android.util.Log.d(tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_INFO
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void androidLogI(final String tagName, final String msg) {
- if (isPrintLog) {
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- android.util.Log.i(tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_WARNING
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void androidLogW(final String tagName, final String msg) {
- if (isPrintLog) {
- List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- android.util.Log.w(tagName + TAG, log);
- }
- }
- }
- /**
- * 打印日志,级别为:LEVEL_ERROR
- *
- * @param tagName 日志tag
- * @param msg 日志信息
- */
- public static void androidLogE(final String tagName, final String msg) {
- if (isPrintLog) {
- final List<String> logMsg = splitString(msg, logMaxLength);
- for (String log: logMsg) {
- android.util.Log.e(tagName + TAG, log);
- }
- }
- }
- /**
- * 获取当前使用者今天的日志文件压缩包,耗时操作,请在子线程调用
- *
- * @param context 上下文对象
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserLogFileZip(final Context context) throws ZipException {
- return getCurrentUserLogFileZip(context, null);
- }
- /**
- * 获取当前使用者今天的日志文件压缩包,耗时操作,请在子线程调用
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserLogFileZip(final Context context, final List<File> sideFiles) throws ZipException {
- return getCurrentUserLogFileZip(context, sideFiles, null);
- }
- /**
- * 获取当前使用者今天的日志文件压缩包,耗时操作,请在子线程调用
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserLogFileZip(final Context context, final List<File> sideFiles, final String customZipFileName) throws ZipException {
- ZipFile zipFile = getLogZipFile(context, true, true,false, customZipFileName);
- if (sideFiles != null && sideFiles.size() > 0) {
- zipFile.addFiles(sideFiles);
- }
- return zipFile.getFile();
- }
- /**
- * 获取当前使用者的所有日志文件压缩包,耗时操作,请在子线程调用
- *
- * @param context 上下文对象
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserAllLogFileZip(final Context context) throws ZipException {
- return getCurrentUserAllLogFileZip(context, null);
- }
- /**
- * 获取当前使用者的所有日志文件压缩包,耗时操作,请在子线程调用
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserAllLogFileZip(final Context context, final List<File> sideFiles) throws ZipException {
- return getCurrentUserAllLogFileZip(context, sideFiles, null);
- }
- /**
- * 获取当前使用者的所有日志文件压缩包,耗时操作,请在子线程调用
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserAllLogFileZip(final Context context, final List<File> sideFiles, final String customZipFileName) throws ZipException {
- ZipFile zipFile = getLogZipFile(context, true, false,false, customZipFileName);
- if (sideFiles != null && sideFiles.size() > 0) {
- zipFile.addFiles(sideFiles);
- }
- return zipFile.getFile();
- }
- /**
- * 获取当前使用者昨天的日志文件压缩包,耗时操作,请在子线程调用
- *
- * @param context 上下文对象
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserYesterdayLogFileZip(final Context context) throws ZipException {
- return getCurrentUserYesterdayLogFileZip(context, null);
- }
- /**
- * 获取当前使用者昨天的日志文件压缩包,耗时操作,请在子线程调用
- *
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserYesterdayLogFileZip(final Context context, final List<File> sideFiles) throws ZipException {
- return getCurrentUserYesterdayLogFileZip(context, sideFiles, null);
- }
- /**
- * 获取当前使用者昨天的日志文件压缩包,耗时操作,请在子线程调用
- *
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getCurrentUserYesterdayLogFileZip(final Context context, final List<File> sideFiles, final String customZipFileName) throws ZipException {
- ZipFile zipFile = getLogZipFile(context, true, false,true, customZipFileName);
- if (sideFiles != null && sideFiles.size() > 0) {
- zipFile.addFiles(sideFiles);
- }
- return zipFile.getFile();
- }
- /**
- * 获取APP所有日志文件压缩包,耗时操作,请在子线程调用
- *
- * @param context 上下文对象
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getAppAllLogFileZip(final Context context) throws ZipException {
- return getAppAllLogFileZip(context, null);
- }
- /**
- * 获取APP所有日志文件压缩包,耗时操作,请在子线程调用
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getAppAllLogFileZip(final Context context, final List<File> sideFiles) throws ZipException {
- return getAppAllLogFileZip(context, sideFiles, null);
- }
- /**
- * 获取APP所有日志文件压缩包,耗时操作,请在子线程调用
- * @param context 上下文对象
- * @param sideFiles 额外文件
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 如果存在这个文件就返回,否则根据默认的日志目录,创建一个压缩包对象,不能确定是否存在文件
- * @throws ZipException 压缩异常
- */
- public static File getAppAllLogFileZip(final Context context, final List<File> sideFiles, final String customZipFileName) throws ZipException {
- ZipFile zipFile = getLogZipFile(context, false, false, false, customZipFileName);
- if (sideFiles != null && sideFiles.size() > 0) {
- zipFile.addFiles(sideFiles);
- }
- return zipFile.getFile();
- }
- /**
- * 创建压缩包
- * @param context 上下文
- * @param isCurrent 当前用户
- * @param isToday 是否只压缩今天
- * @param isYesterday 是否只压缩明天
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 日志压缩文件对象
- * @throws ZipException 压缩异常
- */
- private static ZipFile getLogZipFile(final Context context, final boolean isCurrent, final boolean isToday,
- final boolean isYesterday, final String customZipFileName) throws ZipException {
- File externalFileDir = context.getExternalFilesDir("XLog");
- String logPath = null;
- if (externalFileDir != null) {
- logPath = externalFileDir.getAbsolutePath();
- }
- if (TextUtils.isEmpty(logPath)) {
- LogUtil.i(TAG, "Log缓存目录存在");
- logPath = context.getFilesDir().getPath() + "/XLog";
- } else {
- LogUtil.i(TAG, "Log目录存在");
- }
- File logPathFile = new File(logPath);
- if (logPathFile.exists()) {
- ZipFile logPathZipFile = createLogZipFile(logPath, context, isCurrent, isToday, isYesterday, customZipFileName);
- if (logPathZipFile != null && logPathZipFile.getFile() != null) {
- LogUtil.i(TAG, "压缩日志文件成功");
- return logPathZipFile;
- } else {
- LogUtil.i(TAG, "压缩日志文件失败");
- }
- }
- return new ZipFile(logPath);
- }
- /**
- * 创建压缩包
- * @param path 路径
- * @param context 上下文
- * @param isCurrent 是否当前用户
- * @param isToday 是否只压缩今天
- * @param isYesterday 是否只压缩明天
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 压缩文件
- * @throws ZipException 压缩异常
- */
- private static ZipFile createLogZipFile(final String path, final Context context, final boolean isCurrent,
- final boolean isToday, final boolean isYesterday, final String customZipFileName) throws ZipException {
- //或者压缩文件文件名称
- String zipFileName = getZipFileName(isCurrent, isToday, isYesterday, customZipFileName);
- File logZipDirFile = context.getExternalFilesDir("logZip");
- if (logZipDirFile != null && logZipDirFile.exists() && logZipDirFile.isDirectory()) {
- String zipPath = logZipDirFile.getAbsolutePath();
- //删除旧的压缩文件
- deleteZipFile(logZipDirFile);
- ZipFile zipFile = new ZipFile(zipPath + "/" + zipFileName);
- if (isCurrent && isToday) {
- getCurrentToday(zipFile, path);
- } else if (isCurrent && isYesterday) {
- getCurrentYesterday(zipFile, path);
- } else if (isCurrent) {
- getCurrentAll(zipFile, path);
- } else {
- getAll(zipFile, path);
- }
- return zipFile;
- }
- return null;
- }
- /**
- * 获取当前用户今天的日志
- * @param zipFile 压缩文件
- * @param path 日志目录
- */
- private static void getCurrentToday(final ZipFile zipFile, final String path) throws ZipException {
- List<String> startsWithName = new ArrayList<>();
- //主日志文件
- String logStartsWith = MarsXLogInit.getInstance().getLogFileNamePrefix() + "_" + dateToDay(new Date());
- startsWithName.add(logStartsWith);
- //获取没有前缀的文件
- if (MarsXLogInit.getInstance().isDebugStatus()) {
- String logFileNameDebug = "Debug__" + dateToDay(new Date());
- startsWithName.add(logFileNameDebug);
- } else {
- String logFileNameRelease = "Release__" + dateToDay(new Date());
- startsWithName.add(logFileNameRelease);
- }
- List<File> logFiles = getStartsWithStringFile(startsWithName, path);
- zipFile.addFiles(logFiles);
- }
- /**
- * 获取当前用户昨天的日志
- * @param zipFile 压缩文件
- * @param path 日志目录
- */
- private static void getCurrentYesterday(final ZipFile zipFile, final String path) throws ZipException {
- List<String> startsWithName = new ArrayList<>();
- //主日志文件
- String logStartsWith = MarsXLogInit.getInstance().getLogFileNamePrefix() + "_" + getPastDate(1, "yyyyMMdd");
- startsWithName.add(logStartsWith);
- //获取没有前缀的文件
- if (MarsXLogInit.getInstance().isDebugStatus()) {
- String logFileNameDebug = "Debug__" + getPastDate(1, "yyyyMMdd");
- startsWithName.add(logFileNameDebug);
- } else {
- String logFileNameRelease = "Release__" + getPastDate(1, "yyyyMMdd");
- startsWithName.add(logFileNameRelease);
- }
- List<File> logFiles = getStartsWithStringFile(startsWithName, path);
- zipFile.addFiles(logFiles);
- }
- /**
- * 获取当前用户所有的日志
- * @param zipFile 压缩文件
- * @param path 日志目录
- */
- private static void getCurrentAll(final ZipFile zipFile, final String path) throws ZipException {
- List<String> startsWithName = new ArrayList<>();
- //主日志文件
- String logStartsWith = MarsXLogInit.getInstance().getLogFileNamePrefix();
- startsWithName.add(logStartsWith);
- //获取没有前缀的文件
- if (MarsXLogInit.getInstance().isDebugStatus()) {
- String logFileNameDebug = "Debug__";
- startsWithName.add(logFileNameDebug);
- } else {
- String logFileNameRelease = "Release__";
- startsWithName.add(logFileNameRelease);
- }
- List<File> logFiles = getStartsWithStringFile(startsWithName, path);
- zipFile.addFiles(logFiles);
- }
- /**
- * 获取所有用户所有的日志
- * @param zipFile 压缩文件
- * @param path 日志目录
- */
- private static void getAll(final ZipFile zipFile, final String path) throws ZipException {
- File logPathFile = new File(path);
- File[] logFiles = logPathFile.listFiles();
- if (logFiles != null) {
- zipFile.addFiles(Arrays.asList(logFiles));
- }
- }
- /**
- * 获取以一些字符串开头的文件名的文件
- * @param startsWithName 需要的文件名开头集合
- * @param path 日志目录
- * @return 需要的文件
- */
- private static List<File> getStartsWithStringFile(final List<String> startsWithName, final String path) {
- List<File> needLogFile = new ArrayList<>();
- File logPathFile = new File(path);
- File[] logFiles = logPathFile.listFiles();
- if (logFiles != null) {
- List<File> logFileList = Arrays.asList(logFiles);
- for (File logFile: logFileList) {
- boolean isNeed = false;
- for (String name: startsWithName) {
- if (logFile.getName().startsWith(name)) {
- isNeed = true;
- }
- }
- if (isNeed) {
- needLogFile.add(logFile);
- }
- }
- }
- return needLogFile;
- }
- /**
- * 获取压缩包文件名称
- * @param isCurrent 是否当前用户
- * @param isToday 是否只压缩今天
- * @param isYesterday 是否只压缩明天
- * @param customZipFileName 压缩包名称,不包含后缀
- * @return 压缩包文件名称
- */
- private static String getZipFileName(final boolean isCurrent,
- final boolean isToday, final boolean isYesterday, final String customZipFileName) {
- String zipFileName;
- if (TextUtils.isEmpty(customZipFileName)) {
- if (isCurrent && isToday) {
- zipFileName = MarsXLogInit.getInstance().getLogFileNamePrefix() + "_" + dateToDay(new Date()) + ".zip";
- } else if (isCurrent && isYesterday) {
- zipFileName = MarsXLogInit.getInstance().getLogFileNamePrefix() + "_" + getPastDate(1, "yyyyMMdd") + ".zip";
- } else if (isCurrent) {
- if (MarsXLogInit.getInstance().getLogFileSaveDays() == 0) {
- zipFileName = MarsXLogInit.getInstance().getLogFileNamePrefix() + "_" + getPastDate(10, "yyyyMMdd") + "~" + dateToDay(new Date()) + ".zip";
- } else {
- zipFileName = MarsXLogInit.getInstance().getLogFileNamePrefix() + "_" + getPastDate(MarsXLogInit.getInstance().getLogFileSaveDays(), "yyyyMMdd") + "~" + dateToDay(new Date()) + ".zip";
- }
- } else {
- String fileNamePrefix = MarsXLogInit.getInstance().getLogFileNamePrefix().substring(0, MarsXLogInit.getInstance().getLogFileNamePrefix().indexOf("_"));
- if (MarsXLogInit.getInstance().getLogFileSaveDays() == 0) {
- zipFileName = fileNamePrefix + "_all_user_" + getPastDate(10, "yyyyMMdd") + "~" + dateToDay(new Date()) + ".zip";
- } else {
- zipFileName = fileNamePrefix + "_all_user_" + getPastDate(MarsXLogInit.getInstance().getLogFileSaveDays(), "yyyyMMdd") + "~" + dateToDay(new Date()) + ".zip";
- }
- }
- } else {
- zipFileName = customZipFileName + ".zip";
- }
- return zipFileName;
- }
- /**
- * 删除旧的压缩文件
- * @param logZipDirFile 压缩文件目录
- */
- private static void deleteZipFile(File logZipDirFile) {
- File[] files = logZipDirFile.listFiles();
- if (files != null) {
- for (File file : files) {
- if (file.exists() && file.getName().endsWith(".zip")) {
- boolean result = file.delete();
- LogUtil.i(TAG, "删除旧的日志打包文件结果:" + result);
- }
- }
- }
- }
- private static String dateToDay(Date date) {
- return dateToStr(date, "yyyyMMdd");
- }
- private static String dateToStr(Date datetime, String format) {
- return new SimpleDateFormat(format, Locale.SIMPLIFIED_CHINESE).format(datetime);
- }
- /**
- * 获取过去第几天的日期
- *
- * @param past 天数
- * @param formatString 格式化
- * @return 日期
- */
- private static String getPastDate(final int past, final String formatString) {
- Calendar calendar = Calendar.getInstance();
- calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
- Date today = calendar.getTime();
- SimpleDateFormat format = new SimpleDateFormat(formatString, Locale.SIMPLIFIED_CHINESE);
- String result = format.format(today);
- return result;
- }
- /**
- * 关闭日志,在程序退出时调用。
- */
- public static void appenderClose() {
- MarsXLogInit.getInstance().setXlogOpenStatus(false);
- }
- /**
- * 当日志写入模式为异步时,调用该接口会把内存中的日志写入到文件。
- *
- * @param isSync isSync : true 为同步 flush,flush 结束后才会返回。 false 为异步 flush,不等待 flush 结束就返回。
- */
- public static void appenderFlush(final boolean isSync) {
- LogUtil.i(TAG, "appenderFlush:" + isSync);
- Log.appenderFlushSync(isSync);
- }
- /**
- * 设置日志回调
- * @param logInfo 回调对象
- */
- public static void logPrintInfo(final LogInfo logInfo) {
- mLogInfo = logInfo;
- }
- private static List<String> splitString(final String text, final int splitLength) {
- List<String> temp = new ArrayList<>();
- if (text != null && text.length() > 0) {
- if (text.length() <= splitLength) {
- temp.add(text);
- } else {
- int num = text.length() / splitLength;
- if (num * splitLength < text.length()) {
- num = num + 1;
- }
- for (int i = 0; i < num - 1; i++) {
- temp.add(text.substring(i * splitLength, (i + 1) * splitLength));
- }
- temp.add(text.substring((num -1) * splitLength));
- }
- }
- return temp;
- }
- }
|