Android Log日志保存到本地并读取

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: [email protected]
 * 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: [email protected]
 * 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: [email protected]
 * 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 日志保存到本地以及读取;

发布了322 篇原创文章 · 获赞 450 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/wuqingsen1/article/details/102744275