Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

建议 增加 interceptor 的概念 #41

Closed
lixi0912 opened this issue Dec 5, 2018 · 10 comments
Closed

建议 增加 interceptor 的概念 #41

lixi0912 opened this issue Dec 5, 2018 · 10 comments

Comments

@lixi0912
Copy link

lixi0912 commented Dec 5, 2018

建议增加 interceptor 的概念,用于对数据的处理,如加密、格式化( json、protobuf )、debug 模式下 logcat 输出,如 OkHttp 的 Interceptor

@Richard-Cao
Copy link
Member

主要是很多都在C层,没专门传递log,debug模式下的logcat是有一些

@lixi0912
Copy link
Author

lixi0912 commented Dec 11, 2018

可以考虑先在 JAVA 层增加,后续看是否需要迭代到 C 层

现在打了日志,但是只能导出日志才可以查看(或者打两份日志),开发调试时颇为不便

@Richard-Cao
Copy link
Member

你是说要看写入Logan的日志?

@lixi0912
Copy link
Author

lixi0912 commented Dec 11, 2018

是的,希望调试时,能在 logocat 直观看到明文的日志内容,在 Logan 设置 debug 模式时,发现只是输出一些 Logan 的操作日志,并非自己写入的内容。 如果要查看还需要将该日志导出或者其他途径去读取~ 总觉得在测试过程中并不是很便利(这个时候不禁想到 OkHttp 的 Interceptor ,增加拦截器后,在调试时的输出花样就多了)。

目前 Logan 加密和数据格式化都在 C 层,是否可以考虑通过拆包来解除耦合?这样就可以通过拦截器的概念来对数据定制化(加密、格式)

@Richard-Cao
Copy link
Member

明文看Logan日志内容,和Android自带的log没区别了呀,你在写入之前不就可以看到么。
Logan加密和数据格式化都在C层,是因为提升性能同时保证数据的隐私性,不被其他人破解,所以Java层只有预处理等操作,和日志真正的内容无关

@Richard-Cao
Copy link
Member

Logan不是用来代替Log打日志用的,而是用来存储关键日志,进行个案分析的

@lixi0912
Copy link
Author

lixi0912 commented Dec 12, 2018

通过拦截器对数据处理,实际操作一样可以放在 C 层,这并不影响拆包。

在调试过程中,关键日志同样需要在 Logocat 中可以查看,便于调试,于是就不得不多编写一份 Log 输出的代码。

    if (BuildConfig.DEBUG) {
         Log.e(xxx);
    }
    Logan.w(xxx);

虽然也可以通过包装一次 Logan 来处理这个问题

    public class LoganDelegate{
        public static void w(xxxx){
            if (BuildConfig.DEBUG) {
               Log.d(xxxx); 
           }
           Logan.w(xxxx);
        }
    }

不过这个 issue 主要目的并不是说输出 logocat 这个功能,而是建议拦截器的功能。这样可以给 Logan 带来更多的可能性,比如 数据格式( json、protobuf 或者其他),加密规则自定义(比如我想多加几次盐、或者把秘钥都写到 C 层、或者根据日志级别选择加密不加密、又或者想换其他的加密算法),数据范本自定义(可能并不满足于 WriteAction 的内容格式,也许我想更多的收集一些其他固定数据)

当有了拦截器后,除了实际写入的拦截器,其他的以分包的形式发布供于选择

    Logan.w -> DataEncapsulationInterceptor -> EncryptInterceptor -> WriteInterceptor

@Richard-Cao
Copy link
Member

我明白你的意思,不过在Logan中拦截器能做的确实有限,主要功能都在C,如果在java层只是定义拦截器配置传到C再去处理,就会徒增复杂度了。就比如你说要更改加密规则的前提是,C层要有实现才可以。

@lixi0912
Copy link
Author

lixi0912 commented Dec 12, 2018

如果不放弃性能就会提升复杂度,个人觉得这块性能的影响应该可以忽略?

@Richard-Cao
Copy link
Member

这块我们再考虑下吧

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants