New file |
| | |
| | | package com.anyun.im_lib.util; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * anyunProject(20190906) |
| | | * Created by lzw on 2019/9/6. 17:23:17 |
| | | * 邮箱:632393724@qq.com |
| | | * All Rights Saved! Chongqing AnYun Tech co. LTD |
| | | */ |
| | | |
| | | |
| | | import android.content.Context; |
| | | import android.os.Environment; |
| | | import android.text.TextUtils; |
| | | import android.util.Log; |
| | | |
| | | import java.io.BufferedWriter; |
| | | import java.io.File; |
| | | import java.io.FileWriter; |
| | | import java.io.IOException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | public class MyLog { |
| | | |
| | | private static final String TAG = "AYJiaKao"; |
| | | |
| | | |
| | | private static Boolean MYLOG_SWITCH = true; // 日志文件总开关 |
| | | |
| | | private static Boolean MYLOG_WRITE_TO_FILE = true;// 日志写入文件开关 |
| | | private static File file; |
| | | |
| | | // 输入日志类型,w代表只输出告警信息等,v代表输出所有信息 |
| | | private static char MYLOG_TYPE = 'v'; |
| | | |
| | | // 日志文件在sdcard中的路径 |
| | | private static String MYLOG_PATH_SDCARD_DIR = "/sdcard/JiaKaolog"; |
| | | |
| | | private static int SDCARD_LOG_FILE_SAVE_DAYS = 3;// sd卡中日志文件的最多保存天数 |
| | | |
| | | private static String MYLOGFILEName = "Log.txt";// 本类输出的日志文件名称 |
| | | |
| | | private static SimpleDateFormat myLogSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 日志的输出格式 |
| | | |
| | | private static SimpleDateFormat logfile = new SimpleDateFormat("yyyy-MM-dd");// 日志文件格式 |
| | | |
| | | public Context context; |
| | | |
| | | |
| | | 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 i(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 i(String text) { |
| | | |
| | | log(TAG, text, 'i'); |
| | | |
| | | } |
| | | |
| | | |
| | | public static void v(String tag, String text) { |
| | | |
| | | log(tag, text, 'v'); |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 根据tag, msg和等级,输出日志 |
| | | * |
| | | * @param tag |
| | | * @param msg |
| | | * @param level |
| | | */ |
| | | |
| | | private static void log(final String tag, final String msg, final char level) { |
| | | |
| | | 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)//日志写入文件开关 |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | writeLogtoFile(String.valueOf(level), tag, msg); |
| | | } |
| | | } |
| | | ).start(); |
| | | |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | public static void createIfNotExist() { |
| | | |
| | | |
| | | String needWriteFiel = logfile.format(System.currentTimeMillis()); |
| | | |
| | | |
| | | Log.i(TAG, "createIfNotExist: " + needWriteFiel); |
| | | |
| | | |
| | | File dirsFile = new File(MYLOG_PATH_SDCARD_DIR); |
| | | |
| | | if (!dirsFile.exists()) { |
| | | |
| | | dirsFile.mkdirs(); |
| | | |
| | | } |
| | | |
| | | //Log.i("创建文件","创建文件"); |
| | | |
| | | file = new File(dirsFile.toString(), needWriteFiel + MYLOGFILEName);// MYLOG_PATH_SDCARD_DIR |
| | | |
| | | if (!file.exists()) { |
| | | |
| | | try { |
| | | |
| | | //在指定的文件夹中创建文件 |
| | | |
| | | file.createNewFile(); |
| | | |
| | | } catch (Exception e) { |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 打开日志文件并写入日志 |
| | | * |
| | | * @param mylogtype |
| | | * @param tag |
| | | * @param text |
| | | */ |
| | | |
| | | private static void writeLogtoFile(String mylogtype, final String tag, final String text) {// 新建或打开日志文件 |
| | | |
| | | String needWriteMessage = myLogSdf.format(System.currentTimeMillis()) + " " + tag + " " + text; |
| | | |
| | | try { |
| | | /**后面这个参数代表是不是要接上文件中原来的数据,不进行覆盖**/ |
| | | |
| | | if (file == null) { |
| | | Log.i(TAG, "writeLogtoFile: file==null"); |
| | | createIfNotExist(); |
| | | } |
| | | 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() {// 删除日志文件 |
| | | |
| | | String needDelFiel = logfile.format(getDateBefore()); |
| | | |
| | | String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/nvlog"; |
| | | |
| | | File file = new File(dirPath, needDelFiel + MYLOGFILEName);// MYLOG_PATH_SDCARD_DIR |
| | | |
| | | if (file.exists()) { |
| | | |
| | | file.delete(); |
| | | |
| | | } |
| | | |
| | | } |
| | | |
| | | public static void delSubDirLogs() { |
| | | String dirPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/jiakaolog"; |
| | | String regx = "^[0-9]{4}-"; |
| | | Pattern pattern = Pattern.compile(regx); |
| | | File file = new File(dirPath); |
| | | boolean needDel = false; |
| | | if (file.isDirectory()) { |
| | | Log.i(TAG, "subDirLogs: is a directory"); |
| | | File[] subFiles = file.listFiles(); |
| | | for (File f : |
| | | subFiles) { |
| | | String fName = f.getName(); |
| | | Log.i(TAG, "subDirLogs: 文件名称:" + fName); |
| | | if (!TextUtils.isEmpty(fName)) { |
| | | Matcher matcher = pattern.matcher(fName); |
| | | if (matcher.find()) { |
| | | |
| | | Log.i(TAG, "subDirLogs: 符合规则^[0-9]{4}- : " + matcher.group(0)); |
| | | for (int i = 0; i < SDCARD_LOG_FILE_SAVE_DAYS; i++) { |
| | | String needSaveFileName = logfile.format(getDateBefore(i)); |
| | | Log.i(TAG,"needsaveFileName="+needSaveFileName); |
| | | if (fName.contains(needSaveFileName)) { |
| | | Log.i(TAG, "delSubDirLogs: 此log需要保留:" + fName + " 日期:" + needSaveFileName); |
| | | needDel = false; |
| | | break; |
| | | } else { |
| | | needDel = true; |
| | | } |
| | | } |
| | | if (needDel) { |
| | | Log.i(TAG, "delSubDirLogs: 删除该文件:" + fName); |
| | | f.delete(); |
| | | } |
| | | |
| | | |
| | | } else { |
| | | Log.i(TAG, "delSubDirLogs: 不符合删除规则,则不删除:" + fName); |
| | | } |
| | | } |
| | | } |
| | | } else { |
| | | Log.i(TAG, "subDirLogs: is not a directory"); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 得到现在时间前的几天日期,用来得到需要删除的日志文件名 |
| | | */ |
| | | |
| | | private static Date getDateBefore() { |
| | | |
| | | Date nowtime = new Date(); |
| | | |
| | | Calendar now = Calendar.getInstance(); |
| | | |
| | | now.setTime(nowtime); |
| | | |
| | | now.set(Calendar.DATE, now.get(Calendar.DATE) - SDCARD_LOG_FILE_SAVE_DAYS); |
| | | |
| | | return now.getTime(); |
| | | |
| | | } |
| | | |
| | | private static Date getDateBefore(int i) { |
| | | Date nowtime = new Date(); |
| | | |
| | | Calendar now = Calendar.getInstance(); |
| | | |
| | | now.setTime(nowtime); |
| | | |
| | | now.set(Calendar.DATE, now.get(Calendar.DATE) - i); |
| | | |
| | | return now.getTime(); |
| | | } |
| | | |
| | | } |