package com.artifex.mupdf.viewer; import java.io.File; import java.io.FileWriter; import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; import android.os.Environment; import android.util.Log; /** * 日志工具<br> * 需要权限:android.permission.WRITE_EXTERNAL_STORAGE * <pre> * author : Fantasy * version : 1.0, 2018-04-01 * since : 1.0, 2018-04-01 * </pre> */ class Logger { /** 存放日志文件的目录 */ private static String mPath = Environment.getExternalStorageDirectory().getPath() + "/"; /** 日志打印的标签,也是存放日志的文件夹名 */ private static String mTag = "MuPDFLog"; /** 主要日志,是否生成日志txt文件,并存在手机的文件夹下 */ private static boolean mLogWrite = false; /** 额外日志,是否生成日志txt文件,并存在手机的文件夹下 */ private static boolean mLogWriteOther = false; /** 是否打印日志在LogCat */ private static boolean mSeeLog = false; /** * 日志工具初始化 * * @param path 存放日志文件的目录,以"/"结束 * @param tag “主要日志”的打印的标签,也是存放“主要日志”的文件夹名 * @param logWrite 主要日志,是否生成日志txt文件,并存在手机的文件夹下,文件夹名和打印标签一致 * @param logWriteOther 额外日志,是否生成日志txt文件,并存在手机的文件夹下,文件夹名和打印标签一致 * @param seeLog 是否打印日志在LogCat */ public static void init(String path, String tag, boolean logWrite, boolean logWriteOther, boolean seeLog) { mPath = path; mTag = tag; mLogWrite = logWrite; mLogWriteOther = logWriteOther; mSeeLog = seeLog; } /** * 获取主要日志的打印标签 */ public static String getTag() { return mTag; } /** * 相当于Log.d(tag, msg); * * @param tag 标志 * @param msg 内容 */ public static void d(String tag, String msg) { if (mSeeLog) { Log.d(tag, msg); } } /** * 写异常信息日志 * * @param tag 标签,也是存放日志的文件夹名 * @param e 异常详细信息 * @param where 异常信息来源 */ public static void write(String tag, Exception e, String where) { Logger.write(tag, where); Logger.write(tag, Logger.getStackElement(e)); } /** * 写异常信息日志 * * @param tag 标签,也是存放日志的文件夹名 * @param ex 异常详细信息 * @param where 异常信息来源 */ public static void write(String tag, Throwable ex, String where) { Logger.write(tag, where); Logger.write(tag, Logger.getStackElement(ex)); } /** * 比较全的错误信息 * * @param ex 错误信息 * @return 字符串形式的错误信息 */ private static String getStackElement(Throwable ex) { try { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); ex.printStackTrace(pw); return sw.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; } /** * 写日志文件 * * @param tag 标签,也是存放日志的文件夹名 * @param msg 内容 */ public static void write(String tag, String msg) { if (mSeeLog) { Log.i(tag, msg); } if (mTag.equals(tag)) { if(mLogWrite){ writeToFile(tag, msg); } } else { // 其他标签的日志打印 if (mLogWriteOther) { writeToFile(tag, msg); } } } /** * 将日志信息写到本地文件中 * * @param tag 标签,也是存放日志的文件夹名 * @param msg 内容 */ private static void writeToFile(String tag, String msg) { if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { try { String dir = mPath + tag + "/"; Date now = new Date(); SimpleDateFormat tempDate1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINA); SimpleDateFormat tempDate2 = new SimpleDateFormat("yyyyMMdd", Locale.CHINA); String dateTime = tempDate1.format(now); String fileName = tempDate2.format(now); File destDir = new File(dir); if (!destDir.exists()) { destDir.mkdirs(); } File file = new File(dir + fileName + ".txt"); if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file, true); fw.append("\r\n=============" + dateTime + "=====================\r\n"); fw.append(msg); fw.flush(); fw.close(); } catch (Exception e) { e.printStackTrace(); } } } }