Android Log日志保存到本地并读取
16lz
2021-01-23
Android Log 日志添加保存到本地并读取,下面是效果图:
GitHub 下载地址:https://github.com/wuqingsen/LogUtils
csdn 下载地址:https://download.csdn.net/download/wuqingsen1/11925706
下面添加了三个工具类,分别是变量存储工具类、Log 日志存储并读取、Log 日志添加;
LogVariateUtils 存储变量存储,里面有日志文件的大小等常用变量;
/** * Name: 吴庆森 * Date: 2019/10/23 * Mailbox: 1243411677@qq.com * Describe:变量存储 */public class LogVariateUtils { private boolean SHOW_LOG = true;//是否在logcat中打印log,true打印,false不打印 private boolean WRITE_LOG = true;//是否在文件中记录,true记录,false不记录 private long fileSize = 100000;//日志文件的大小,默认0.1M private String TAG = "TLOG";//Logcat中显示的tag private static LogVariateUtils instance; public static LogVariateUtils getInstance() { if (instance == null) { synchronized (LogVariateUtils.class) { if (instance == null) { instance = new LogVariateUtils(); } } } return instance; } public LogVariateUtils isShowLog(boolean isShowLog) { SHOW_LOG = isShowLog; return this; } public boolean getIsShowLog() { return SHOW_LOG; } public LogVariateUtils isWriteLog(boolean isWriteLog) { WRITE_LOG = isWriteLog; return this; } public boolean getIsWriteLog() { return WRITE_LOG; } public LogVariateUtils fileSize(long size) { this.fileSize = size; return this; } public long getFileSize() { return this.fileSize; } public LogVariateUtils tag(String tag) { TAG = tag; return this; } public String getTag() { return TAG; }}
LogFileUtils 写入文件以及读出文件;
import android.os.Environment;import java.io.File;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.Date;/** * Name: 吴庆森 * Date: 2019/10/23 * Mailbox: 1243411677@qq.com * Describe:存储日志 */public class LogFileUtils { private static Object obj = new Object(); //文件名称 private static String fileName = "operationLog-" + "Log日志" + ".log"; //文件路径 private static String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/Log日志/"; /** * 写入文件 * * @param msg */ public static void writeLogFile(String msg) { synchronized (obj) { try { createFile(); File file = new File(filePath + fileName); FileWriter fw = null; if (file.exists()) { if (file.length() > LogVariateUtils.getInstance().getFileSize()) fw = new FileWriter(file, false); else fw = new FileWriter(file, true); } else fw = new FileWriter(file, false); Date d = new Date(); SimpleDateFormat s = new SimpleDateFormat("MM-dd HH:mm:ss"); String dateStr = s.format(d); fw.write(String.format("[%s] %s", dateStr, msg)); fw.write(13); fw.write(10); fw.flush(); fw.close(); } catch (Throwable ex) { ex.printStackTrace(); } } } /** * 取出文件 * * @return */ public static String readLogText() { FileReader fr = null; try { File file = new File(filePath + fileName); if (!file.exists()) { return ""; } long n = LogVariateUtils.getInstance().getFileSize(); long len = file.length(); long skip = len - n; fr = new FileReader(file); fr.skip(Math.max(0, skip)); char[] cs = new char[(int) Math.min(len, n)]; fr.read(cs); return new String(cs).trim(); } catch (Throwable ex) { ex.printStackTrace(); } finally { try { if (fr != null) fr.close(); } catch (IOException e) { e.printStackTrace(); } } return ""; } //创建文件夹 public static void createFile() { File file = new File(filePath); if (!file.exists()) { file.mkdir(); } }}
LogUtils 打印日志;
/** * Name: 吴庆森 * Date: 2019/10/23 * Mailbox: 1243411677@qq.com * Describe:打印日志并存储日志记录 */public class LogUtils { public static void i(String title, String msg) { String str = formatString(title, msg); if (LogVariateUtils.getInstance().getIsShowLog()) Log.i(LogVariateUtils.getInstance().getTag(), str); if (LogVariateUtils.getInstance().getIsWriteLog()) LogFileUtils.writeLogFile(str); } public static void w(String title, String msg) { String str = formatString(title, msg); if (LogVariateUtils.getInstance().getIsShowLog()) Log.w(LogVariateUtils.getInstance().getTag(), str); if (LogVariateUtils.getInstance().getIsWriteLog()) LogFileUtils.writeLogFile(str); } public static void e(String title, String msg) { String str = formatString(title, msg); if (LogVariateUtils.getInstance().getIsShowLog()) Log.e(LogVariateUtils.getInstance().getTag(), str); if (LogVariateUtils.getInstance().getIsWriteLog()) LogFileUtils.writeLogFile(str); } public static String formatString(String title, String msg) { if (title == null) { return msg == null ? "" : msg; } return String.format("[%s]: %s", title, msg == null ? "" : msg); }}
工具类添加完毕后,在 MainActivity 中添加如下代码,以便使用工具类:
@Override public void onClick(View view) { switch (view.getId()) { case R.id.btn_log: String title = titleEdit.getText().toString().trim(); String log = logEdit.getText().toString().trim(); //添加日志 LogUtils.i(title, log); Toast.makeText(MainActivity.this, "添加日志成功", Toast.LENGTH_SHORT).show(); break; case R.id.btn_check: //取出日志 tv_log.setText(LogFileUtils.readLogText()); break; } }
这样就可以完成 Log 日志保存到本地以及读取;
更多相关文章
- Android Rom签名文件的生成与签名
- Android资源文件xml的编写
- Android 工程中各种文件的介绍
- 在Android中把内容写到XML文件中
- 【Android】volley网络框架的文件下载
- android 对文件的操作模式
- Android从网上下载文件