Android抓取系统日志,然后作为文本附件发送邮件
来源:互联网 发布:世事洞明皆学问 知乎 编辑:程序博客网 时间:2024/06/07 17:24
作为开发,我们深深体谅测试的同学。这里将代码嵌入到项目里面,测试只需要两秒钟就可以将抓取系统log并发送给开发了,大大节约了人力成本。
首先创建一个类,取名CustomlLogcat,作用是抓取系统log并写入文件。
public class CustomlLogcat{public static String LOG_PATH = Environment.getExternalStorageDirectory() + File.separator + "custom_log.txt";public interface OnLogGetListener {public void onLogGet();}public static class MLog{public static void Log(final Context c ,final OnLogGetListener l){final Thread th=new Thread(new Runnable(){@Overridepublic void run(){getLog();}});Handler hanlder = new Handler();hanlder.post(new Runnable() {@Overridepublic void run() {try {th.start();} finally {if (l != null) {l.onLogGet();}}}});}private static void getLog(){try{ deleteLog();ArrayList<String> cmdLine=new ArrayList<String>(); cmdLine.add("logcat");cmdLine.add("-d");cmdLine.add("*:W");ArrayList<String> clearLog=new ArrayList<String>(); clearLog.add("logcat");clearLog.add("-c");Process process=Runtime.getRuntime().exec(cmdLine.toArray(new String[cmdLine.size()])); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(process.getInputStream()));String str=null;while((str=bufferedReader.readLine())!=null){Runtime.getRuntime().exec(clearLog.toArray(new String[clearLog.size()])); writeLog(str);}if(str==null){}}catch(Exception e){e.printStackTrace();}}private static void deleteLog() {File f = new File(LOG_PATH);if (f.exists()) {f.delete();}}private static void writeLog(String str) {File f = new File(LOG_PATH);try {if (!f.exists()) {f.createNewFile();}FileWriter fw = new FileWriter(f ,true);fw.write(str);fw.write("\r\n");fw.close();} catch (IOException e) {e.printStackTrace();}}}
以上代码需要注意的是,本人只抓取了warnning(W)级别以上的代码,所以传递给系统的命令代码是:
ArrayList<String> cmdLine=new ArrayList<String>(); cmdLine.add("logcat");cmdLine.add("-d");cmdLine.add("*:W");
接着,就可以把系统日志作为附件发送邮件给开发了。
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {menu.add(0, 0, 0, "抓取日志");menu.add(0, 1, 0, "发送邮件给小天天");menu.add(0, 2, 0, "发送邮件给小马马");menu.add(0, 3, 0, "发送邮件给小斌斌");menu.add(0, 4, 0, "发送邮件给小尊尊");menu.add(0, 5, 0, "发送邮件给小饼饼");return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case 0:CustomlLogcat.MLog.Log(MainActivity.this, new OnLogGetListener() {@Overridepublic void onLogGet() {Toast.makeText(MainActivity.this, "日志抓取完毕,可以发送邮件。", Toast.LENGTH_SHORT).show();}});break;case 1:sendLogMail(1);break;case 2:sendLogMail(2);break;case 3:sendLogMail(3);break;case 4:sendLogMail(4);break;case 5:sendLogMail(5);break;}return super.onOptionsItemSelected(item);}public void sendLogMail(int optionIndex) {File file = new File(CustomlLogcat.LOG_PATH); //附件文件地址 Intent intent = new Intent(Intent.ACTION_SEND); if (optionIndex == 1) { intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"XXXX@XXXX.com"}); } else if (optionIndex == 2) { intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"XXXX@XXXX.com"}); } else if (optionIndex == 3) { intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"XXXXX@XXX.com"}); } else if (optionIndex == 4) { intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"XXXX@XXXX.com"}); } else if (optionIndex == 5) { intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"XXXX@XXXX.com"}); } else {} intent.putExtra("subject", "Android斗地主log--------------"); // intent.putExtra("body", "详情查看附件-------------"); //正文 intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); //添加附件,附件为file对象 if (file.getName().endsWith(".gz")) { intent.setType("application/x-gzip"); //如果是gz使用gzip的mime } else if (file.getName().endsWith(".txt")) { intent.setType("text/plain"); //纯文本则用text/plain的mime } else { intent.setType("application/octet-stream"); //其他的均使用流当做二进制数据来发送 } startActivity(intent); //调用系统的mail客户端进行发送}}
- Android抓取系统日志,然后作为文本附件发送邮件
- kettle之定时抓取服务器上日志文件然后以附件形式送邮件
- 使用javaMail发送文本邮件和带附件邮件以及android后台发送邮件
- android调用系统邮件发送图片文本
- Android 调用系统Email发送带多附件的邮件
- Android调用系统邮件发送附件 文件大小0B
- 使用javamail发送邮件(文本+附件)
- javamail发送文本邮件、HTML邮件及带附件邮件
- php发送文本邮件和带附件邮件
- ABAP模块-任意report作为附件以邮件形式发送
- sql server查询数据库信息作为附件发送邮件信息
- java 发送邮件(qq邮箱作为发件箱,带附件)
- java 定时发送邮件以及数据导出excel作为附件
- 基于javaMail的邮件发送--excel作为附件
- android 发送带附件的邮件
- android发送含有附件的邮件
- Android上发送带附件的邮件
- android发送邮件(包括附件)
- jQuery实现表单的验证
- x$bh详解
- mysql 表 删除重复信息
- Python 3.2中 推导列表的简单小例子
- JDK、TOMCAT环境变量配置-精简配置
- Android抓取系统日志,然后作为文本附件发送邮件
- Jquery实现的小功能2、显示品牌的列表
- 优化屏障(Optimization barrier)第一讲
- GPS定位基本原理浅析
- 全球公共DNS解析服务器
- 优化屏障(Optimization barrier)第二讲
- 智能卡复位应答-字符定义 ATR
- 位运算转换IP地址为长整型
- hdu 4500 小Q系列故事——屌丝的逆袭