最近写项目总是遇到一些莫名其妙的问题,找不到好的解决方法,在网上搜了一个打印日志的方法,加以修改了,捕捉错误。
废话不多说,直接上代码。
/** * Created by admin on 2018/3/26. */ public class LogToFile { private static String TAG = "LogToFile"; private static String logPath = null;//log日志存放路径 private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);//日期格式; private static SimpleDateFormat dateFormat_log = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss", Locale.US);//日期格式; /** * 初始化,须在使用之前设置,最好在Application创建时调用 * * @param context */ public static void init(Context context) { logPath = getFilePath(context) + "/Logs";//获得文件储存路径,在后面加"/Logs"建立子文件夹 File file = new File(logPath); if (file.exists()) { if (getFolderSize(file) > 150 * 1024 * 1024) { deleteFile(file); } } else { file.mkdirs(); } } /** * 获得文件存储路径 * * @return */ public static String getFilePath(Context context) { if (Environment.MEDIA_MOUNTED.equals(Environment.MEDIA_MOUNTED) || !Environment.isExternalStorageRemovable()) {//如果外部储存可用 return context.getExternalFilesDir(null).getPath();//获得外部存储路径,默认路径为 /storage/emulated/Android/data/com.../files/Logs/log_2018-03-14.txt } else { return context.getFilesDir().getPath();//直接存在/data/data里,非root手机是看不到的 } } private static final char VERBOSE = 'v'; private static final char DEBUG = 'd'; private static final char INFO = 'i'; private static final char WARN = 'w'; private static final char ERROR = 'e'; public static void v(String tag, String msg) { writeToFile(VERBOSE, tag, msg); } public static void d(String tag, String msg) { File file = new File(logPath); if (getFolderSize(file) < 500 * 1024 * 1024) { writeToFile(DEBUG, tag, msg); } } public static void i(String tag, String msg) { writeToFile(INFO, tag, msg); } public static void w(String tag, String msg) { writeToFile(WARN, tag, msg); } public static void e(String tag, String msg) { writeToFile(ERROR, tag, msg); } /** * 将log信息写入文件中 * * @param type * @param tag * @param msg */ private static void writeToFile(char type, String tag, String msg) { if (null == logPath) { Log.e(TAG, "logPath == null ,未初始化LogToFile"); return; } Log.e(TAG + tag, msg); String fileName = logPath + "/log_" + dateFormat.format(new Date()) + ".txt";//log日志名,使用时间命名,保证不重复 String log = dateFormat_log.format(new Date()) + " " + type + " " + tag + " " + msg + "\n";//log日志内容,可以自行定制 //如果父路径不存在 File file = new File(logPath); if (!file.exists()) { file.mkdirs();//创建父路径 } FileOutputStream fos = null;//FileOutputStream会自动调用底层的close()方法,不用关闭 BufferedWriter bw = null; try { fos = new FileOutputStream(fileName, true);//这里的第二个参数代表追加还是覆盖,true为追加,flase为覆盖 bw = new BufferedWriter(new OutputStreamWriter(fos)); bw.write(log); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (bw != null) { bw.close();//关闭缓冲流 } } catch (IOException e) { e.printStackTrace(); } } } public static long getFolderSize(File file) { long size = 0; try { File[] fileList = file.listFiles(); for (int i = 0; i < fileList.length; i++) { if (fileList[i].isDirectory()) { size = size + getFolderSize(fileList[i]); } else { size = size + fileList[i].length(); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return size; } /** * 删除日志 * * @param file */ public static void deleteFile(File file) { if (file.isDirectory()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; deleteFile(f); } // file.delete();//如要保留文件夹,只删除文件,请注释这行 } else if (file.exists()) { file.delete(); } } }