Android Log 日志添加保存到本地并读取,下面是效果图:
GitHub 下载地址:https://github.com/wuqingsen/LogUtils
下面添加了三个工具类,分别是变量存储工具类、Log 日志存储并读取、Log 日志添加;
LogVariateUtils 存储变量存储,里面有日志文件的大小等常用变量;
/**
* Name: 吴庆森
* Date: 2019/10/23
* 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
* 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
* 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 日志保存到本地以及读取;