美文网首页
Android订阅日志输出

Android订阅日志输出

作者: hongzhenw | 来源:发表于2023-11-08 14:12 被阅读0次

    APP打包时,在proguard-rules.pro添加以下配置,可以去除Log的日志输出:

    -assumenosideeffects class android.util.Log {
        public static int v(...);
        public static int i(...);
        public static int w(...);
        public static int d(...);
        public static int e(...);
    }
    

    当我们需要上送某个操作的执行步骤,比如借助Log的输出,用于分析、定位问题,那么使用java的观察者方式,不失为一个好的方式。

    代码:

    import java.util.Observable;
    
    public class LogSdk extends Observable {
    
        private LogSdk() {
        }
    
        public static LogSdk getInstance() {
            return LogSdkHolder.instance;
        }
    
        private static class LogSdkHolder {
            private static final LogSdk instance = new LogSdk();
        }
    
        /**
         * 发布通知
         *
         * @param msg 被订阅的数据
         */
        public void log(Object msg) {
            //标示状态或者内容发生改变
            setChanged();
            //通知所有观察者
            notifyObservers(msg);
        }
    }
    

    使用:

    // 日志输出
    private void print(String tag, String msg) {
        Log.e(tag, msg);
        // 入参与addObserver update方法的arg对应
        LogSdk.getInstance().log(new String[]{tag, msg});
    }
    
    private void clickBtn() {
        // 用于存储执行步骤
        StringBuilder sb = new StringBuilder();
        // 订阅观察
        LogSdk.getInstance().addObserver(new Observer() {
            @Override
            public void update(Observable o, Object arg) {
                String[] args = (String[]) arg;
                sb.append(args[0]).append(":").append(args[1]).append(System.lineSeparator());
            }
        });
    
        // 模拟执行
        for (int i = 0; i < 10; i++) {
            print("test", "item-" + i);
        }
        // 取消观察
        LogSdk.getInstance().deleteObservers();
    
        // 拿到模拟执行的输出日志
        Log.e("whz", sb.toString());
    }
    

    过滤whz,有以下输出:

    test:item-0
    test:item-1
    test:item-2
    test:item-3
    test:item-4
    test:item-5
    test:item-6
    test:item-7
    test:item-8
    test:item-9
    

    相关文章

      网友评论

          本文标题:Android订阅日志输出

          本文链接:https://www.haomeiwen.com/subject/aqeqwdtx.html