软件背景
当线上产品人数达到一定级别时,软件的维护,BUG的解决就变得至关重要。 但测试阶段发现的BUG毕竟有限,一旦上线后只能靠一些第三放的Crash追踪平台解决,而对于非Crash又无法复现的BUG只能放任不管么?
对于这种需求我就专门弄了XLog这个工具,将开发者需要的重要数据保存到本地,并能自动管理、控制大小、过期删除、自定义Crash后的操作(比如自动上传LOG文件到服务器)
示例
需要声明服务:
<service android:name="com.sum.xlog.core.LogService" />
使用配置
XLogConfiguration.Builder builder = new XLogConfiguration.Builder(MyApplication.this)
.setConsoleLogLevel(LogLevel.D) //Logger输出最低级别
.setFileLogLevel(LogLevel.D) //保存至文件最低级别
.setCrashHandlerOpen(true) //开启异常捕获
.setOriginalHandler(Thread.getDefaultUncaughtExceptionHandler()) //第三方统计
.setOnUpdateCrashInfoListener(null) //Crash自动上传处理
.setFileLogRetentionPeriod(7); //过期删除
XLog.init(builder.build());
基本方法
XLog.d("=== XXX ===");//省略写法
XLog.d(TAG, "=== xxx ===");//这里只是用Debug Level示例
XLog.d(TAG, "=== %s,%s ===", "XXX", "XXX"); //多个参数是推荐使用,无需用户拼接字符
所有的LOG信息会先缓存到一个缓冲List中,当LOG信息大于20条时才会调用保存方法,这里是为了保证程序的流畅性。
日志会自动保存到SD下的packageName_xlog文件夹下(当然这个路径开发者可以使用XLogConfiguration自己配置),想要快速获取当前LOG日志文件可以使用FileUtil.getTodayLogFilePath()
Intent data = new Intent(Intent.ACTION_SEND); //这里用一个发送邮件方法作为一个示例,如果有服务器接口支持的话,可以直接传到服务器中
data.putExtra(Intent.EXTRA_EMAIL,new String[] {"test@test.com"});
data.putExtra(Intent.EXTRA_SUBJECT, getString(R.string.app_name));
data.putExtra(Intent.EXTRA_TEXT, "这是我的LOG日志");
data.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + FileUtil.getTodayLogFilePath()));
data.setType("message/rfc882");
startActivity(Intent.createChooser(data, getString(R.string.app_name)));
附上Github连接:https://github.com/Qiu800820/XLog