android 底层日志 开发框架 崩溃后进行记录 LogReport

news/2024/7/8 7:35:54


  •  其他 (Others)
  •  ★★★★★
  •  2016-07-24 22:05
  •  902 kb
  •  Android Studio
  •  205 次
  •  10 次
  •  https://github.com/wenmingvs/LogReport

介绍:

当App崩溃的时,把崩溃信息保存到本地的同时,自动给GitHub提交崩溃issue,你只需要几句,就能完成所有配置。

运行效果:

使用说明:

特性介绍

特性 简介
自定义日志保存路径 默认保存在Android/data/com.xxxx.xxxx/log中
自定义日志缓存大小 默认大小为30M,超出后会自动清空文件夹
支持多种上传方式 目前支持邮件上传与HTTP上传,会一并把文件夹下的所有日志打成压缩包作为附件上传
日志加密保存 提供AES,DES两种加密解密方式支持,默认不加密
日志按天保存 目前崩溃日志和Log信息是按天保存,你可以继承接口来实现更多的保存样式
携带设备与OS信息 在创建日志的时候,会一并记录OS版本号,App版本,手机型号等信息,方便还原崩溃
自定义日志上传的时机 默认只在Wifi状态下上传支持,也支持在Wifi和移动网络下上传
支持保存Log日志 在打印Log的同时,把Log写入到本地(保存的时候会附带线程名称,线程id,打印时间),还原用户操作路径,为修复崩溃提供更多细节信息
GitHub自动提交issue 使用邮件发送的形式,把接受崩溃日志的邮箱和GitHub特定的开源项目绑定在一起即可,更多细节请看下面介绍

依赖添加

在你的项目根目录下的build.gradle文件中加入依赖

1
2
3
4
5
6
allprojects {
     repositories {
         ...
         maven { url  "https://jitpack.io"  }
     }
}

添加依赖

1
2
3
dependencies {
     compile  'com.github.wenmingvs:LogReport:1.0.3'
}

初始化

在自定义Application文件加入以下几行代码即可,默认使用email发送。如果您只需要在本地存储崩溃信息,不需要发送出去,请把initEmailReport()删掉即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class MyApplication extends Application {
 
     @Override
     public void onCreate() {
         super .onCreate();
         initCrashReport();
     }
 
     private void initCrashReport() {
         LogReport.getInstance()
                 .setCacheSize(30 * 1024 * 1024) //支持设置缓存大小,超出后清空
                 .setLogDir(getApplicationContext(),  "sdcard/"  this .getString( this .getApplicationInfo().labelRes) +  "/" ) //定义路径为:sdcard/[app name]/
                 .setWifiOnly( true ) //设置只在Wifi状态下上传,设置为false为Wifi和移动网络都上传
                 .setLogSaver( new  CrashWriter(getApplicationContext())) //支持自定义保存崩溃信息的样式
                 //.setEncryption(new AESEncode()) //支持日志到AES加密或者DES加密,默认不开启
                 .init(getApplicationContext());
         initEmailReporter();
     }
 
     /**
      * 使用EMAIL发送日志
      */
     private void initEmailReporter() {
         EmailReporter email =  new  EmailReporter( this );
         email.setReceiver( "wenmingvs@gmail.com" ); //收件人
         email.setSender( "wenmingvs@163.com" ); //发送人邮箱
         email.setSendPassword( "apptest1234" ); //邮箱的客户端授权码,注意不是邮箱密码
         email.setSMTPHost( "smtp.163.com" ); //SMTP地址
         email.setPort( "465" ); //SMTP 端口
         LogReport.getInstance().setUploadType(email);
     }
}

上传

在任意地方,调用以下方法即可,崩溃发生后,会在下一次App启动的时候使用Service异步打包日志,然后上传日志,发送成功与否,Service都会自动退出释放内存

1
LogReport.getInstance().upload(context);

发往服务器

如果您有自己的服务器,想往服务器发送本地保存的日志文件,而不是通过邮箱发送。请使用以下方法替换initEmailReporter方法

1
2
3
4
5
6
7
8
9
10
11
12
13
     /**
      * 使用HTTP发送日志
      */
     private void initHttpReporter() {
         HttpReporter http =  new  HttpReporter( this );
         http.setUrl( "http://crashreport.jd-app.com/your_receiver" );//发送请求的地址
         http.setFileParam( "fileName" ); //文件的参数名
         http.setToParam( "to" ); //收件人参数名
         http.setTo( "你的接收邮箱" ); //收件人
         http.setTitleParam( "subject" ); //标题
         http.setBodyParam( "message" ); //内容
         LogReport.getInstance().setUploadType(http);
     }

保存Log到本地

使用以下方法,打印Log的同时,把Log信息保存到本地(保存的时候会附带线程名称,线程id,打印时间),并且随同崩溃日志一起,发送到特定的邮箱或者服务器上。帮助开发者还原用户的操作路径,更好的分析崩溃产生的原因

1
LogWriter.writeLog( "wenming" "打Log测试!!!!" );


相关代码

  • logger
  • LogUtils
  • debugoverlay



这其中如果用到网易邮箱会有一个问题
554 DT:SPM 163 smtp7,C8CowABHS92JNJhXLPDDAw--.5461S2 1469592714,
please see http://mail.163.com/help/help_spam_16.htm?ip=119.145.82.219&hostid=smtp7&time=1469592714

建议使用QQ邮箱的stmp协议
POP3/SMTP服务 ( 如何使用 Foxmail 等软件收发邮件?)
已开启 |   关闭

设置进入方法:
点击【设置】 --- 》 【账户 】---》 拖到中下部就可以看到了 -

本文完






http://www.niftyadmin.cn/n/4582756.html

相关文章

Layui基本功能(增删改查)

话不多说,根据我前面的博客我们直接进行操作。记住以下的文件放置,防止操作出不来. 这是我们要完成的界面及功能 后台功能实现 数据查看 我们在userDao方法里面进行增删改查的方法我们在userAction进行方法的编写R工具类的介绍 查询 userDao方法 因为我…

CentOS6.8 x86_64bit shell脚本实现模拟nginx服务启动与关闭

shell脚本模拟nginx服务启动与关闭注意: 3个斜杠///后面表示在这表示对当前语句的解释,实际脚本中必须删除 #!/bin/bash///定义哪种脚本语言解释下面的语句[ -f /etc/init.d/functions ]&& . /etc/init.d/functions ///判断并加载系统函数nginx&…

线程安全和线程不安全的区别

线程安全 就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全 就是不提供数据访问保护…

10分钟上线 - 利用函数计算构建微信小程序的Server端

摘要: 阿里云函数计算是一个事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。微信小程序是一种不需要下载安装即可使用的应用,它可以在微信内被便捷地获取和传播。 当微信小程序遇见serv…

安卓 eclipse 项目 迁移 android studio gradle 配置 热修复 annotations注解

repositories {mavenCentral()mavenLocal()jcenter() }buildscript {repositories {mavenCentral()mavenLocal()jcenter()}dependencies {classpath com.android.tools.build:gradle:2.1.0// annotations 注解classpath com.neenbedankt.gradle.plugins:android-apt:1.4// tin…

python 中正则表达式的使用

正则表达式的定义 正则表达式(re)(Regular Expression)。正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字…

app混淆加固+防止反编译+360加固

android studio混淆加密,没有使用第三方加密后的效果好,混淆加密还能看到大体的混淆包名,使用了那些框架 而使用了360加固后,全部看不到了 下图是360加固window操作IDE,非常好用! 然后用反编译软件反编译后…

GitHub:上传文件到GitHub

摘要:文件怎样通过git上传到GitHub上?怎样让文件永久的保存呢,GitHub是一个非常好的代码托管平台,可以上传,也可以下载。我使用的工具是git。首先打开某一个要上传的文件夹,右键git bash一下第一步&#xf…