Android将应用log信息保存文件
相信大家在做应用调试的时候,不可能时时通过USB线连着电脑去查看log信息,所以,将应用的log信息保存到手机本地就很有必要了,有助我们从这些log信息中提取有用的部分,以解决一些bug,下面我把网上分享的代码中作了一些精简,作为开发者使用,个人觉得没必要通过用户上传给我们,用户上传的不需要这么庞大的log信息,仅仅那部分崩溃的log信息即可,可参考我的另外一篇blog:http://blog.csdn.net/weidi1989/article/details/7927273。
好了,废话不多说,直接分享封装好的log信息类:LogcatHelper
- package com.way.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import android.content.Context;
- import android.os.Environment;
- /**
- * log日志统计保存
- *
- * @author way
- *
- */
- public class LogcatHelper {
- private static LogcatHelper INSTANCE = null;
- private static String PATH_LOGCAT;
- private LogDumper mLogDumper = null;
- private int mPId;
- /**
- *
- * 初始化目录
- *
- * */
- public void init(Context context) {
- if (Environment.getExternalStorageState().equals(
- Environment.MEDIA_MOUNTED)) {// 优先保存到SD卡中
- PATH_LOGCAT = Environment.getExternalStorageDirectory()
- .getAbsolutePath() + File.separator + "miniGPS";
- } else {// 如果SD卡不存在,就保存到本应用的目录下
- PATH_LOGCAT = context.getFilesDir().getAbsolutePath()
- + File.separator + "miniGPS";
- }
- File file = new File(PATH_LOGCAT);
- if (!file.exists()) {
- file.mkdirs();
- }
- }
- public static LogcatHelper getInstance(Context context) {
- if (INSTANCE == null) {
- INSTANCE = new LogcatHelper(context);
- }
- return INSTANCE;
- }
- private LogcatHelper(Context context) {
- init(context);
- mPId = android.os.Process.myPid();
- }
- public void start() {
- if (mLogDumper == null)
- mLogDumper = new LogDumper(String.valueOf(mPId), PATH_LOGCAT);
- mLogDumper.start();
- }
- public void stop() {
- if (mLogDumper != null) {
- mLogDumper.stopLogs();
- mLogDumper = null;
- }
- }
- private class LogDumper extends Thread {
- private Process logcatProc;
- private BufferedReader mReader = null;
- private boolean mRunning = true;
- String cmds = null;
- private String mPID;
- private FileOutputStream out = null;
- public LogDumper(String pid, String dir) {
- mPID = pid;
- try {
- out = new FileOutputStream(new File(dir, "GPS-"
- + MyDate.getFileName() + ".log"));
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- /**
- *
- * 日志等级:*:v , *:d , *:w , *:e , *:f , *:s
- *
- * 显示当前mPID程序的 E和W等级的日志.
- *
- * */
- // cmds = "logcat *:e *:w | grep \"(" + mPID + ")\"";
- // cmds = "logcat | grep \"(" + mPID + ")\"";//打印所有日志信息
- // cmds = "logcat -s way";//打印标签过滤信息
- cmds = "logcat *:e *:i | grep \"(" + mPID + ")\"";
- }
- public void stopLogs() {
- mRunning = false;
- }
- @Override
- public void run() {
- try {
- logcatProc = Runtime.getRuntime().exec(cmds);
- mReader = new BufferedReader(new InputStreamReader(
- logcatProc.getInputStream()), 1024);
- String line = null;
- while (mRunning && (line = mReader.readLine()) != null) {
- if (!mRunning) {
- break;
- }
- if (line.length() == 0) {
- continue;
- }
- if (out != null && line.contains(mPID)) {
- out.write((MyDate.getDateEN() + " " + line + "\n")
- .getBytes());
- }
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (logcatProc != null) {
- logcatProc.destroy();
- logcatProc = null;
- }
- if (mReader != null) {
- try {
- mReader.close();
- mReader = null;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (out != null) {
- try {
- out.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- out = null;
- }
- }
- }
- }
- }
记得加上权限:
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.READ_LOGS" />
另外把那个时间的工具类也分享一下:
- package com.way.util;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- public class MyDate {
- public static String getFileName() {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
- String date = format.format(new Date(System.currentTimeMillis()));
- return date;// 2012年10月03日 23:41:31
- }
- public static String getDateEN() {
- SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String date1 = format1.format(new Date(System.currentTimeMillis()));
- return date1;// 2012-10-03 23:41:31
- }
- }
OK,所有事情做完之后,在我们的应用中start一下就OK了,使用完之后,记得调用一下stop:
- public class GPSApplication extends Application {
- @Override
- public void onCreate() {
- // TODO Auto-generated method stub
- LogcatHelper.getInstance(this).start();
- }
- }
原文:http://blog.csdn.net/way_ping_li/article/details/8487866
Android将应用log信息保存文件相关推荐
- android jni打印log信息
今天,讲讲在jni中如何打印logxx,用来进行调试. 一.实现 1.修改Android.mk文件. 在这个配置文件中我们加入如下一行代码: LOCAL_LDLIBS += -llog 注意:这行代码 ...
- Linux中的密码信息保存文件
0x00 前言 Linux系统下,用户的密码会被加密保存在文件/etc/shadow中,本文尝试对这一部分内容进行整理,介绍相关基础知识,测试常用方法,帮助大家对此有更直观的认识. 0x01 Linu ...
- Android11 热点配置信息保存分析
Android11 热点配置信息保存分析 文章目录 Android11 热点配置信息保存分析 一.Android11 wifi和热点 配置信息保存的文件位置 1.wifi和热点保存的实际位置 2.wi ...
- Log保存文件-Android
为什么80%的码农都做不了架构师?>>> 前言 在开发过程中尤其是项目进入测试后,为了方便定位问题,经常需要将log保存下来,当然你可以自己写个log辅助类又或者直接使用第三方 ...
- Android开发过程中在sh,py,mk文件中添加log信息的方法
Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ...
- android中资源文件的两种访问方式,Android_Android学习笔记-保存文件(Saving Files),Android设备有两种文件存储区域 - phpStudy...
Android学习笔记-保存文件(Saving Files) Android设备有两种文件存储区域: 内部存储和外部存储 ("internal" and "externa ...
- 【Android NDK 开发】NDK C/C++ 代码崩溃调试 - Tombstone 报错信息日志文件分析 ( 获取 tombstone_0X 崩溃日志信息 )
文章目录 一.崩溃信息描述 二.手机命令行操作 三.电脑命令行操作 四.Tombstone 内容 Tombstone 报错信息日志文件被保存在了 /data/tombstones/ 目录下 , 先 R ...
- LINUX系统以及ANDROID 平台log信息输出级别设置 [MTK]
一.LK层: 首先,在LK中,有一个对log打印级别的控制文档,其路径一般为:vendor\mediatek\proprietary\bootable\bootloader\lk\include\de ...
- Android中对Log日志文件的分析
Android中对Log日志文件的分析 如何分析和研究Log文件 ,如何看日志信息 Log 在android中的地位非常重要,要是作为一个android程序员不能过分析log这关,算是android没 ...
- android 读取excel数据并保存为xml文件
今天,简单讲讲android如何 读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...
最新文章
- Python中函数的参数定义和可变参数
- 【济宁百瑞达机械设备有限公司——文化拓展学习】2018技术展望:利用现有IT投资扩大云部署...
- ios 边录音边放_关于Android和iOS系统OneNote支持边录音边记笔记的需求和建议
- OpenCV C++ 04 - Change Brightness
- python猫狗大战讲解_tensorflow实现猫狗大战(分类算法)
- Swagger如何访问Ocelot中带权限验证的API
- 对象创建型 - 单利模式
- android wchar t 中文,Android没有真正的wchar_t吗?
- 数据源中没有 datarow_Power BI Desktop 中的数据源
- pyspark 条件_删除pyspark中特定条件下的特定行
- 弘辽科技:淘宝改SKU图片会影响权重吗?
- python制作网页挂机_Python实现自动挂机脚本(GUI 打包)
- 开源驱动全球经济发展
- JS 缓存: Service Worker 实现离线应用
- 跨境公路货运调研分析-市场规模、市场份额、市场定位、产品类型以及发展规划
- 浩辰cad2017破解版|浩辰电气cad2017无限使用破解版下载
- 老男孩之《生日快乐》
- 现在最火爆的盲盒交友小程序源码
- 计算机网络安全运维管理工作总结,计算机设备日常运维工作总结
- K-Means聚类算法原理及其python和matlab实现
热门文章
- windows 内核进程的优先级_华为鸿蒙 OS 轻量内核设计理念与关键特性
- java脚本计算器按钮无反应_2020年3月份最新计算机语言排行,20种语言争锋相对Java依旧飘逸...
- c语言小游戏_打字游戏超细讲解(C语言基础小游戏)
- 学生选课系统代码--分析2需求分析
- python解析json文件三种_Python解析json文件相关知识学习
- 鞍山楷邦计算机学院,计算机专业和平面设计专业是一个专业不?
- 浙江理工大学机械复试c语言真题,2016年浙江理工大学机械与自动控制学院计算机应用基础)之C程序设计复试笔试最后押题五套卷...
- python只保留大写字母_python - 匹配某一行并保留大写字母?
- GAN 生成mnist数据
- foobar2000实现用手机远程控制PC命令行版