编译问题
在Window系统中编译踩坑了一天时间,结果没编译过去,然后跑到mac os上一次就编译通过了。
使用问题记录
在使用Xlog 进行日志打印的时候,使用mars自带的脚本进行解码的时候会报错
Traceback (most recent call last):
File "decode_mars_nocrypt_log_file.py", line 105, in DecodeBuffer
tmpbuffer = decompressor.decompress(str(tmpbuffer))
error: Error -3 while decompressing: invalid stored block lengths
在 mars 的issues 里面查了下说是进程日志打印的问题。
但是只通过当前的日志打印很难查出来是什么问题导致的。
所以想了个比较简单的解决方案
在打印的过程中在 日志内容前面添加 pid打印。
int pid = android.os.Process.myPid();
Log.i("mars","[pid="+pid+"]["+tag+"]"+message);
然后在logcat里面查看日志的时候,一定不能选择 Show only selected application
会导致其他进程的内容不被查看到。 选择 no Filters
然后筛选出来发现确实在Application 启动的时候由于有接入推送所以会有在两个进程同时打印日志。
就是这个原因导致了上面的解析报错。
然后自己写了个比较简单的解决方案。
因为APP只有两个进程。所以通过判断当前是否为主线程来初始化xlog。
public static void init(boolean mainProcess,boolean debug) {
System.loadLibrary("c++_shared");
System.loadLibrary("marsxlog");
if (debug) {
Xlog.appenderOpen(Xlog.LEVEL_DEBUG, Xlog.AppednerModeAsync, cachePath, logPath, mainProcess?"a":"xg_a", 0, null);
Xlog.setConsoleLogOpen(true);
} else {
Xlog.appenderOpen(Xlog.LEVEL_INFO, Xlog.AppednerModeAsync, cachePath, logPath, mainProcess?"a":"xg_a", 0, null);
Xlog.setConsoleLogOpen(false);
}
Log.setLogImp(new Xlog());
}
在不同进程,初始化不同的文件名称。
至此就完整的解决了日志接入的问题。
网友评论