日志保存SD卡并上传服务器的工具类
日志本地写入过于频繁或者积累太多会导致应用卡顿和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卡并上传服务器的工具类相关推荐
- 阿里云oss上传下载删除工具类
工具类-阿里云oss private static String accessId;private static String accessKey;private static String endp ...
- ios java 图片上传到服务器,iOS 图片上传服务器
最近搞图片上传,折腾了一个星期终于做出来了,网上搜出来的方法几乎都是好几年前的,试了好多都不能用,此次把代码公布出来供大家参考. 注:部分代码是后台写的,此方法没用到第三方库. 1.图片保存到本地同时 ...
- pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...
- java用itextPDF生成PDF文件保存至本地并上传至ftp服务器
标题java用itextPDF生成PDF文件保存至本地并上传至ftp服务器 所需jar :itext-asian-5.2.0.jar,itextpdf-5.5.5.jar,commons-net-3. ...
- asp.net中有关文件HTTP上传服务器保存的问题(捷易拍sdk开发方面)
我们都知道,一般客户端文件上传服务器有两种方法:HTTP上传和FTP上传两种.两种上传方式以捷易拍SDK为例: 1.HTTP上传: /********************************* ...
- ios上传文件云服务器上,ios文件上传服务器
ios文件上传服务器 内容精选 换一换 在当前的迁移流程中,可能会存在迁移后ECS控制台镜像名称与实际操作系统不一致的现象.在当前机制下,该现象属于正常现象.该处显示的是下发ECS时使用的镜像名称,而 ...
- 本地ecshop网站怎么上传到服务器,ecshop 上传服务器
ecshop 上传服务器 内容精选 换一换 将SAP应用服务器迁移到华为云,有以下两种方法:用方法一:主机迁移服务SMS进行迁移用方法二:镜像导入的方式进行迁移.我推荐使用方法一进行迁移,但是对于源端 ...
- 大文件上传服务器:支持超大文件HTTP断点续传的实现办法
点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料! 来源:blog.csdn.net/ababab12345/a ...
- HTML5调用本地摄像头画面,拍照,上传服务器
实现功能和适用业务 采集本地摄像头获取摄像头画面,拍照保存,上传服务器: 前端上传图片处理,展示,缩小,裁剪,上传服务器 实现步骤 调取本地摄像头(getUserMedia)/上传图片,将图片/视频显 ...
最新文章
- 宁‘内卷‘,勿‘躺平‘
- linux磁盘满处理
- 使用Spring MVC统一异常处理实战
- asp.net 域名欺骗式开发
- 快做这 15点,让 SpringBoot 启动更快一点!
- 前端学习(902):this指向问题
- 《Java8实战》笔记汇总
- 【剑指offer】面试题10- I:斐波那契数列(Java)
- sql limit 子句_具有并行性SQL Server TOP子句性能问题
- KB奇遇记(9):艰难的上线
- python assert_Python中何时使用断言 assert
- redis雪崩和穿透、击穿的解决方法
- dnf第七章waiguaⅢ∨dnf第七章好感度【=dnf第七章免费外挂
- Gos —— 加载内核
- 谷歌刷新纪录:将圆周率精确到了小数点后31万亿位,光存储就占了几个大硬盘!
- 网络安全9大思维的实战检验
- 小程序可以删除或者注销吗
- 福布斯:阿里巴巴收购雅虎对大家都有利
- 计算机辅助程序英语,计算机辅助学习英语单词分组的设计
- WWW 2018论文分享| 基于部分可见异常样本的异常检测问题