Android mars - Xlog 使用过程踩坑记录

编译问题

在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());
    }

在不同进程,初始化不同的文件名称。
至此就完整的解决了日志接入的问题。

你可能感兴趣的:(Android mars - Xlog 使用过程踩坑记录)