|
|
@@ -1,13 +1,25 @@
|
|
|
package com.uas.huiyan.util;
|
|
|
|
|
|
import android.annotation.SuppressLint;
|
|
|
+import android.os.Build;
|
|
|
+import android.support.annotation.RequiresApi;
|
|
|
import android.util.Log;
|
|
|
|
|
|
+import com.uas.huiyan.application.PdaApplication;
|
|
|
+
|
|
|
import java.io.BufferedWriter;
|
|
|
import java.io.File;
|
|
|
import java.io.FileWriter;
|
|
|
import java.io.IOException;
|
|
|
+import java.nio.file.Files;
|
|
|
+import java.nio.file.Path;
|
|
|
+import java.nio.file.Paths;
|
|
|
+import java.nio.file.attribute.BasicFileAttributes;
|
|
|
+import java.nio.file.attribute.FileTime;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.ZoneId;
|
|
|
import java.util.Date;
|
|
|
|
|
|
/**
|
|
|
@@ -15,147 +27,205 @@ import java.util.Date;
|
|
|
*/
|
|
|
@SuppressLint("SimpleDateFormat")
|
|
|
public class MyLog {
|
|
|
- public static Boolean MYLOG_SWITCH = true; // 日志文件总开关
|
|
|
- private static Boolean MYLOG_WRITE_TO_FILE = true;// 日志写入文件开关
|
|
|
- private static char MYLOG_TYPE = 'v';// 输入日志类型,w代表只输出告警信息等,v代表输出所有信息
|
|
|
- @SuppressLint("SdCardPath")
|
|
|
- private static String MYLOG_PATH_SDCARD_DIR1 = "/sdcard/MSShow"; // 日志文件在sdcard中的路径
|
|
|
- private static String MYLOG_PATH_SDCARD_DIR2 = "/Log";
|
|
|
- private static String MYLOG_PATH_SDCARD_DIR = MYLOG_PATH_SDCARD_DIR1+MYLOG_PATH_SDCARD_DIR2;
|
|
|
- private static String MYLOGFILEName = "Log.txt";// 本类输出的日志文件名称
|
|
|
-
|
|
|
- @SuppressLint("SimpleDateFormat")
|
|
|
- private static SimpleDateFormat myLogSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式
|
|
|
-
|
|
|
- private static boolean isDebug = true; //普通log的开关
|
|
|
- private static String TAG = "英唐" +"-----------";
|
|
|
-
|
|
|
- public static void e(String msg){
|
|
|
- if(isDebug){
|
|
|
- Log.e(TAG, msg);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void w(String msg){
|
|
|
- if(isDebug){
|
|
|
- Log.w(TAG, msg);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void d(String msg){
|
|
|
- if(isDebug){
|
|
|
- Log.d(TAG, msg);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void i(String msg){
|
|
|
- if(isDebug){
|
|
|
- Log.i(TAG, msg);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void w(String tag, Object msg) { // 警告信息
|
|
|
- log(tag, msg.toString(), 'w');
|
|
|
- }
|
|
|
-
|
|
|
- public static void e(String tag, Object msg) { // 错误信息
|
|
|
- log(tag, msg.toString(), 'e');
|
|
|
- }
|
|
|
-
|
|
|
- public static void d(String tag, Object msg) {// 调试信息
|
|
|
- log(tag, msg.toString(), 'd');
|
|
|
- }
|
|
|
-
|
|
|
- public static void i(String tag, Object msg) {//
|
|
|
- log(tag, msg.toString(), 'i');
|
|
|
- }
|
|
|
-
|
|
|
- public static void v(String tag, Object msg) {
|
|
|
- log(tag, msg.toString(), 'v');
|
|
|
- }
|
|
|
-
|
|
|
- public static void w(String tag, String text) {
|
|
|
- log(tag, text, 'w');
|
|
|
- }
|
|
|
-
|
|
|
- public static void e(String tag, String text) {
|
|
|
- log(tag, text, 'e');
|
|
|
- }
|
|
|
-
|
|
|
- public static void d(String tag, String text) {
|
|
|
- log(tag, text, 'd');
|
|
|
- }
|
|
|
-
|
|
|
- public static void i(String tag, String text) {
|
|
|
- log(tag, text, 'i');
|
|
|
- }
|
|
|
-
|
|
|
- public static void v(String tag, String text) {
|
|
|
- log(tag, text, 'v');
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据tag, msg和等级,输出日志
|
|
|
- */
|
|
|
- private static void log(String tag, String msg, char level) {
|
|
|
- msg = "\r\n"+msg;
|
|
|
- if (MYLOG_SWITCH) {
|
|
|
- if ('e' == level && ('e' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { // 输出错误信息
|
|
|
- Log.e(tag, msg);
|
|
|
- } else if ('w' == level && ('w' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
|
|
|
- Log.w(tag, msg);
|
|
|
- } else if ('d' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
|
|
|
- Log.d(tag, msg);
|
|
|
- } else if ('i' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
|
|
|
- Log.i(tag, msg);
|
|
|
- } else {
|
|
|
- Log.v(tag, msg);
|
|
|
- }
|
|
|
- if (MYLOG_WRITE_TO_FILE) {
|
|
|
- writeLogtoFile(String.valueOf(level), tag, msg);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 打开日志文件并写入日志
|
|
|
- * **/
|
|
|
- private static void writeLogtoFile(String mylogtype, String tag, String text) {// 新建或打开日志文件
|
|
|
- isExist(MYLOG_PATH_SDCARD_DIR1);
|
|
|
- isExist(MYLOG_PATH_SDCARD_DIR);
|
|
|
- Date nowtime = new Date();
|
|
|
-// String needWriteFiel = logfile.format(nowtime);
|
|
|
- String needWriteMessage = myLogSdf.format(nowtime) + " " + mylogtype
|
|
|
- + " " + tag + " " + text;
|
|
|
- File file = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
|
|
|
- try {
|
|
|
- FileWriter filerWriter = new FileWriter(file, true);// 后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖
|
|
|
- BufferedWriter bufWriter = new BufferedWriter(filerWriter);
|
|
|
- bufWriter.write(needWriteMessage);
|
|
|
- bufWriter.newLine();
|
|
|
- bufWriter.close();
|
|
|
- filerWriter.close();
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除制定的日志文件
|
|
|
- * */
|
|
|
- public static void delFile() {// 删除日志文件
|
|
|
- File file = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
|
|
|
- if (file.exists()) {
|
|
|
- file.delete();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public static void isExist(String path) {
|
|
|
- File file = new File(path);
|
|
|
- // 判断文件夹是否存在,如果不存在则创建文件夹
|
|
|
- if (!file.exists()) {
|
|
|
- file.mkdir();
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+ public static Boolean MYLOG_SWITCH = true; // 日志文件总开关
|
|
|
+ private static Boolean MYLOG_WRITE_TO_FILE = true;// 日志写入文件开关
|
|
|
+ private static char MYLOG_TYPE = 'v';// 输入日志类型,w代表只输出告警信息等,v代表输出所有信息
|
|
|
+ @SuppressLint("SdCardPath")
|
|
|
+// private static String MYLOG_PATH_SDCARD_DIR1 = "/sdcard/MSShow"; // 日志文件在sdcard中的路径
|
|
|
+// private static String MYLOG_PATH_SDCARD_DIR1 = "/data/data/" + PdaApplication.getmContext().getPackageName(); //APP包下创建的文件不需要权限
|
|
|
+ private static String MYLOG_PATH_SDCARD_DIR1 = "/sdcard/Android/data/" + PdaApplication.getmContext().getPackageName(); //模拟器的APP包下创建的文件
|
|
|
+ private static String MYLOG_PATH_SDCARD_DIR2 = "/Log";
|
|
|
+ private static String MYLOG_PATH_SDCARD_DIR = MYLOG_PATH_SDCARD_DIR1 + MYLOG_PATH_SDCARD_DIR2;
|
|
|
+ private static String MYLOGFILEName = "Log.txt";// 本类输出的日志文件名称
|
|
|
+
|
|
|
+ @SuppressLint("SimpleDateFormat")
|
|
|
+ private static SimpleDateFormat myLogSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式
|
|
|
+
|
|
|
+ private static boolean isDebug = true; //普通log的开关
|
|
|
+ private static String TAG = "英唐" + "-----------";
|
|
|
+
|
|
|
+ public static void e(String msg) {
|
|
|
+ if (isDebug) {
|
|
|
+ Log.e(TAG, msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void w(String msg) {
|
|
|
+ if (isDebug) {
|
|
|
+ Log.w(TAG, msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void d(String msg) {
|
|
|
+ if (isDebug) {
|
|
|
+ Log.d(TAG, msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void i(String msg) {
|
|
|
+ if (isDebug) {
|
|
|
+ Log.i(TAG, msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void w(String tag, Object msg) { // 警告信息
|
|
|
+ log(tag, msg.toString(), 'w');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void e(String tag, Object msg) { // 错误信息
|
|
|
+ log(tag, msg.toString(), 'e');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void d(String tag, Object msg) {// 调试信息
|
|
|
+ log(tag, msg.toString(), 'd');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void i(String tag, Object msg) {//
|
|
|
+ log(tag, msg.toString(), 'i');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void v(String tag, Object msg) {
|
|
|
+ log(tag, msg.toString(), 'v');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void w(String tag, String text) {
|
|
|
+ log(tag, text, 'w');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void e(String tag, String text) {
|
|
|
+ log(tag, text, 'e');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void d(String tag, String text) {
|
|
|
+ log(tag, text, 'd');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void i(String tag, String text) {
|
|
|
+ log(tag, text, 'i');
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void v(String tag, String text) {
|
|
|
+ log(tag, text, 'v');
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 根据tag, msg和等级,输出日志
|
|
|
+ */
|
|
|
+ private static void log(String tag, String msg, char level) {
|
|
|
+ msg = "\r\n" + msg;
|
|
|
+ if (MYLOG_SWITCH) {
|
|
|
+ if ('e' == level && ('e' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) { // 输出错误信息
|
|
|
+ Log.e(tag, msg);
|
|
|
+ } else if ('w' == level && ('w' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
|
|
|
+ Log.w(tag, msg);
|
|
|
+ } else if ('d' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
|
|
|
+ Log.d(tag, msg);
|
|
|
+ } else if ('i' == level && ('d' == MYLOG_TYPE || 'v' == MYLOG_TYPE)) {
|
|
|
+ Log.i(tag, msg);
|
|
|
+ } else {
|
|
|
+ Log.v(tag, msg);
|
|
|
+ }
|
|
|
+ if (MYLOG_WRITE_TO_FILE && 'd' == level) {
|
|
|
+ writeLogtoFile(String.valueOf(level), tag, msg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 打开日志文件并写入日志,
|
|
|
+ **/
|
|
|
+ private static void writeLogtoFile(String mylogtype, String tag, String text) {
|
|
|
+ // 新建或打开日志文件
|
|
|
+ isExist(MYLOG_PATH_SDCARD_DIR1);
|
|
|
+ isExist(MYLOG_PATH_SDCARD_DIR);
|
|
|
+ Date nowtime = new Date();
|
|
|
+ // String needWriteFiel = logfile.format(nowtime);
|
|
|
+ String needWriteMessage = myLogSdf.format(nowtime) + " " + mylogtype
|
|
|
+ + " " + tag + " " + text;
|
|
|
+ File file = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
|
|
|
+ try {
|
|
|
+ FileWriter filerWriter = new FileWriter(file, true);// 后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖
|
|
|
+ BufferedWriter bufWriter = new BufferedWriter(filerWriter);
|
|
|
+ bufWriter.write(needWriteMessage);
|
|
|
+ bufWriter.newLine();
|
|
|
+ bufWriter.close();
|
|
|
+ filerWriter.close();
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除制定的日志文件
|
|
|
+ */
|
|
|
+ public static void delFile() {// 删除日志文件
|
|
|
+ File file = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
|
|
|
+ if (file.exists()) {
|
|
|
+ file.delete();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void isExist(String path) {
|
|
|
+ File file = new File(path);
|
|
|
+ // 判断文件夹是否存在,如果不存在则创建文件夹
|
|
|
+ if (!file.exists()) {
|
|
|
+ file.mkdir();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取消Android8.0的提示限制
|
|
|
+ */
|
|
|
+ @RequiresApi(api = Build.VERSION_CODES.O)
|
|
|
+ public static void delNotDayFile(){
|
|
|
+ File fileP = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
|
|
|
+ if (fileP.exists()) {
|
|
|
+ Path path = Paths.get(MYLOG_PATH_SDCARD_DIR + "/" + MYLOGFILEName); //文件路径
|
|
|
+ try {
|
|
|
+ // 获取文件的属性
|
|
|
+ BasicFileAttributes attrs = Files.readAttributes(path, BasicFileAttributes.class);
|
|
|
+ // 获取文件的创建时间
|
|
|
+ FileTime creationTime = attrs.creationTime();
|
|
|
+ // 转换为LocalDateTime以便于比较
|
|
|
+ //将FileTime对象转换为LocalDateTime以便于与当前日期进行比较。这里使用了系统的默认时区(ZoneId.systemDefault())。如果需要特定时区,可以替换为相应的ZoneId。
|
|
|
+ //通过LocalDateTime 的 toLocalDate()方法将时间转换为仅包含日期(忽略时间),然后与当前日期进行比较。
|
|
|
+ LocalDateTime creationDateTime = creationTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+
|
|
|
+ // 比较是否为当天创建
|
|
|
+ if (isToday(creationDateTime)) {
|
|
|
+ //System.out.println("文件是今天创建的。");
|
|
|
+ } else {
|
|
|
+ //System.out.println("文件不是今天创建的。");
|
|
|
+ delFile(); //删除不是当天日期
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 辅助方法,检查日期是否为今天
|
|
|
+ @RequiresApi(api = Build.VERSION_CODES.O)
|
|
|
+ private static boolean isToday(LocalDateTime dateTime) {
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ LocalDate fileDate = dateTime.toLocalDate();
|
|
|
+ return today.equals(fileDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断文件是否为当天创建(使用最后修改时间),不同则删除
|
|
|
+ * Android 7.0推荐使用此方法
|
|
|
+ */
|
|
|
+ public static void isFileCreatedTodayDel() {
|
|
|
+ File fileP = new File(MYLOG_PATH_SDCARD_DIR, MYLOGFILEName);
|
|
|
+ if (fileP.exists()) {
|
|
|
+ if (!FileUtils.isFileCreatedToday(fileP)) {
|
|
|
+ delFile(); //删除不是当天创建的日期
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
}
|