日志本地写入过于频繁或者积累太多会导致应用卡顿和GC,应当及时或者定期清除文件。

package com.bliss.yang.signingapplication.utils;import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Environment;
import android.util.Log;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;/*** @autor YangTianFu* @Date 2019/4/12  17:20* @Description 日志保存SD卡并上传服务器的工具类*/
public class LogUtil {private static final String TAG = "LogUtil";// 是否需要打印bug,在application的onCreate函数里面初始化public static boolean isDebug;private static final String PATH = Environment.getExternalStorageDirectory().getPath() + "/CrashKZ/log/";private static final String FILE_NAME = "crash";private static final String FILE_NAME_SUFFIX = ".txt";private static Context mContext;public static void init(Context context) {mContext = context.getApplicationContext();}// 下面四个是默认tag的函数public static void i(String msg) {if (isDebug) {Log.i(TAG, msg);
//            dumpLogErrorToSDCard(msg);}}public static void d(String msg) {if (isDebug) {Log.d(TAG, msg);}}public static void e(String msg) {if (isDebug) {Log.e(TAG, msg);
//            dumpLogErrorToSDCard(msg);}}public static void e(String tag, String msg) {if (isDebug) {Log.e(tag, msg);
//            dumpLogErrorToSDCard(msg);}}public static void v(String msg) {if (isDebug) {Log.v(TAG, msg);}}// 下面是传入自定义tag的函数public static void i(String tag, String msg) {if (isDebug) {Log.i(tag, msg);
//            dumpLogErrorToSDCard(msg);}}/*** 截断输出日志* @param msg*/public static void eLength(String tag, String msg) {if (isDebug) {if (tag == null || tag.length() == 0|| msg == null || msg.length() == 0) {return;}int segmentSize = 3 * 1024;long length = msg.length();if (length <= segmentSize) {// 长度小于等于限制直接打印Log.e(tag, msg);} else {while (msg.length() > segmentSize) {// 循环分段打印日志String logContent = msg.substring(0, segmentSize);msg = msg.replace(logContent, "");Log.e(tag, logContent);}Log.e(tag, msg);// 打印剩余日志}}}/*** 分段打印出较长log文本* @param log 原log文本* @param*/public static void showLogCompletion(String string, String log) {if (log.length() > 4000) {for (int i = 0; i < log.length(); i += 4000) {if (i + 4000 < log.length()) {Log.i(string + i, log.substring(i, i + 4000));} else {Log.i(string + i, log.substring(i, log.length()));}}} else {Log.i(string, log);}}/*** @Author:yangtianfu* @Date:{2019/4/16 16:36}* @Description 将崩溃日志和自定义错误日志写入SD卡根目录*/public static void dumpLogErrorToSDCard(String msg) {//如果SD卡不存在或无法使用,则无法把异常信息写入SD卡if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {if (isDebug) {Log.e(TAG, "sdcard unmounted,skip dump exception");return;}}long current = System.currentTimeMillis();String time = new SimpleDateFormat("yyyy-MM-dd HH:MM:SS").format(new Date(current));File dir = new File(PATH);if (!dir.exists()) {dir.mkdirs();}File file = new File(PATH + FILE_NAME + FILE_NAME_SUFFIX);try {PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));pw.println(time);
//            dumpPhoneInfo(pw);pw.println(msg);pw.println();pw.close();
//            Log.e(TAG, "日志写入成功");} catch (Exception e) {Log.e(TAG, e.getMessage());
//            Log.e(TAG, "日志写入失败");}}/*** @Author:yangtianfu* @Date:{2019/4/16 16:37}* @Description 获取当前设备信息*/private static void dumpPhoneInfo(PrintWriter pw) throws PackageManager.NameNotFoundException {PackageManager pm = mContext.getPackageManager();PackageInfo pi = pm.getPackageInfo(mContext.getPackageName(), PackageManager.GET_ACTIVITIES);pw.print("App Version: ");pw.print(pi.versionName);pw.print('_');pw.println(pi.versionCode);//Android版本号
//        pw.print("OS Version: ");
//        pw.print(Build.VERSION.RELEASE);
//        pw.print("_");
//        pw.print(Build.VERSION.SDK_INT);//手机制造商
//        pw.print("Vendor: ");
//        pw.print(Build.MANUFACTURER);//手机型号
//        pw.print("Model: ");
//        pw.println(Build.MODEL);//CPU架构
//        pw.print("CPU ABI: ");
//        pw.println(Build.CPU_ABI);}
}

日志保存SD卡并上传服务器的工具类相关推荐

  1. 阿里云oss上传下载删除工具类

    工具类-阿里云oss private static String accessId;private static String accessKey;private static String endp ...

  2. ios java 图片上传到服务器,iOS 图片上传服务器

    最近搞图片上传,折腾了一个星期终于做出来了,网上搜出来的方法几乎都是好几年前的,试了好多都不能用,此次把代码公布出来供大家参考. 注:部分代码是后台写的,此方法没用到第三方库. 1.图片保存到本地同时 ...

  3. pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

    pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...

  4. java用itextPDF生成PDF文件保存至本地并上传至ftp服务器

    标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...

  5. asp.net中有关文件HTTP上传服务器保存的问题(捷易拍sdk开发方面)

    我们都知道,一般客户端文件上传服务器有两种方法:HTTP上传和FTP上传两种.两种上传方式以捷易拍SDK为例: 1.HTTP上传: /********************************* ...

  6. ios上传文件云服务器上,ios文件上传服务器

    ios文件上传服务器 内容精选 换一换 在当前的迁移流程中,可能会存在迁移后ECS控制台镜像名称与实际操作系统不一致的现象.在当前机制下,该现象属于正常现象.该处显示的是下发ECS时使用的镜像名称,而 ...

  7. 本地ecshop网站怎么上传到服务器,ecshop 上传服务器

    ecshop 上传服务器 内容精选 换一换 将SAP应用服务器迁移到华为云,有以下两种方法:用方法一:主机迁移服务SMS进行迁移用方法二:镜像导入的方式进行迁移.我推荐使用方法一进行迁移,但是对于源端 ...

  8. 大文件上传服务器:支持超大文件HTTP断点续传的实现办法

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/ababab12345/a ...

  9. HTML5调用本地摄像头画面,拍照,上传服务器

    实现功能和适用业务 采集本地摄像头获取摄像头画面,拍照保存,上传服务器: 前端上传图片处理,展示,缩小,裁剪,上传服务器 实现步骤 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显 ...

最新文章

  1. 宁‘内卷‘,勿‘躺平‘
  2. linux磁盘满处理
  3. 使用Spring MVC统一异常处理实战
  4. asp.net 域名欺骗式开发
  5. 快做这 15点,让 SpringBoot 启动更快一点!
  6. 前端学习(902):this指向问题
  7. 《Java8实战》笔记汇总
  8. 【剑指offer】面试题10- I:斐波那契数列(Java)
  9. sql limit 子句_具有并行性SQL Server TOP子句性能问题
  10. KB奇遇记(9):艰难的上线
  11. python assert_Python中何时使用断言 assert
  12. redis雪崩和穿透、击穿的解决方法
  13. dnf第七章waiguaⅢ∨dnf第七章好感度【=dnf第七章免费外挂
  14. Gos —— 加载内核
  15. 谷歌刷新纪录:将圆周率精确到了小数点后31万亿位,光存储就占了几个大硬盘!
  16. 网络安全9大思维的实战检验
  17. 小程序可以删除或者注销吗
  18. 福布斯:阿里巴巴收购雅虎对大家都有利
  19. 计算机辅助程序英语,计算机辅助学习英语单词分组的设计
  20. WWW 2018论文分享| 基于部分可见异常样本的异常检测问题

热门文章

  1. 重学 Java 设计模式:实战访问者模式「模拟家长与校长,对学生和老师的不同视角信息的访问场景」
  2. 水星USB无线网卡mw150us苹果macOS系统驱动成功
  3. 对未来计算机的期盼,表达怀念过去期待未来的句子
  4. Android代码心得6-Intent的使用
  5. 美颜滤镜SDK有什么效果?美颜SDK可以自主开发吗?
  6. 计算机二级c语言预测,计算机二级C语言考前预测上机试题及解析
  7. CIDR表示IP地址
  8. win10自动重启另辟蹊径解决方案
  9. 写一个自动回复的聊天机器人
  10. 盘古开源解析:芯片订单超过产能,2022汽车出现缺芯难题