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

android:日志上传 #61

Closed
lingyanluoxue opened this issue Jan 14, 2019 · 32 comments
Closed

android:日志上传 #61

lingyanluoxue opened this issue Jan 14, 2019 · 32 comments
Assignees
Labels
bug Something isn't working

Comments

@lingyanluoxue
Copy link

记录日志以后上传,debug显示上传的是一个.copy文件,但是在相应的目录找不到.copy文件

@Richard-Cao
Copy link
Member

当上传的日志是当日日志,会创建.copy文件,然后会在上传成功之后删除。

@lingyanluoxue
Copy link
Author

在debug的时候发现确实生成了.copy文件,但是在SendLogRunnable 监听回来还未完成上传.copy文件就被删除,所以我想咨询下.copy文件是在什么时机删除,是怎么评判上传成功呢?

@Richard-Cao
Copy link
Member

哦不对,是上传之后就删除了,不会管是否成功,我刚又看了一下逻辑,不好意思。。

@Richard-Cao
Copy link
Member

你遇到的问题是上传文件没有了导致上传失败吗?

@lingyanluoxue
Copy link
Author

是,文件还没上传.copy文件就已经删除,所以会出现文件找不到。

@Richard-Cao
Copy link
Member

这块儿逻辑我改一下吧,可能会有隐患,我就不去自动删除了,让开发者自己删除吧,我提供一个方法出来

@lingyanluoxue
Copy link
Author

好的,非常感谢

@Richard-Cao
Copy link
Member

你的sendLog方法是怎么实现的?我这边试了很多次都没出现你这个情况……

@lingyanluoxue
Copy link
Author

String d = dataFormat.format(new Date(System.currentTimeMillis()));
Logan.s(new String[]{d}, new SendLogRunnable() {
@OverRide
public void sendLog(File logFile) {
RequestBody requestBody = RequestBody.
create(MediaType.parse("multipart/form-data"), logFile);
MultipartBody.Part logFileBody = MultipartBody.Part
.createFormData("logFile", logFile.getName(), requestBody);
HttpGenerator.loganApi().uploadLogan(params,logFileBody).subscribe(new ReqObserver() {
@OverRide
public void onSuccess(BaseModel resp) {
Log.d("logan","success");
}

                    @Override
                    public void onFailure(BaseModel resp) {
                        Log.d("logan","Failure");
                    }
                });
            }
        });

@lingyanluoxue
Copy link
Author

呃呃,我在使用Logan-Android的时候偶尔也会出现上传不成功的情况

@lingyanluoxue
Copy link
Author

已经解决

@Richard-Cao
Copy link
Member

怎么解决的? @lingyanluoxue

@lingyanluoxue
Copy link
Author

解决方案还是需要上传成功以后再删除,我看了源码,是发送以后就删除的,发送以后获取到预处理的file,进行网络上传是开启一个子线程,这样的话就会导致出现已经删除,但是还没上传。所以我建议还是应该把删除单独剔出来,让开发者在上传以后自行处理

@Richard-Cao
Copy link
Member

那你是改了源码还是在外部包装处理的?

@lingyanluoxue
Copy link
Author

在外部包装处理的

@Richard-Cao
Copy link
Member

外部包装怎么处理的?方便看看代码么

@lingyanluoxue
Copy link
Author

我理解错了,没有进行外部包装,log.s()会把预处理的file返回,我会重新保存一份.copy文件,上传以后再做处理

@Richard-Cao
Copy link
Member

明白了,这块儿我思考一下怎么改

@Richard-Cao Richard-Cao self-assigned this Jan 21, 2019
@Richard-Cao Richard-Cao added the bug Something isn't working label Jan 21, 2019
@Richard-Cao Richard-Cao mentioned this issue Jan 21, 2019
@lingyanluoxue
Copy link
Author

好的,建议对file的删除处理交给开发者进行操作

@Caij
Copy link

Caij commented Jan 31, 2019

我觉得可以把上传这块逻辑做简单一些,源码中主要是flush和copy两个操作,而且好像这个方法只是获取当前日期的日志文件, 并且源码中还搞了一个ExecutorService, 从性能上我根本不需要源码中这个线程池去做上传。 感觉可以把send操作简化成一个flush操作,ExecutorService也可以去掉, 并回调List 所有文件。关于回调里面的上传提醒开发者必须用异步,避免阻塞写log线程队列。这个回调回来让开发者去copy 和 delete文件,上传的操作写在example里面开发者应该都可以明白。

@Richard-Cao
Copy link
Member

这样的话逻辑暴露太多,在使用上就会产生各种意想不到的效果了,这块我最近改一改先

@Richard-Cao
Copy link
Member

@Caij 这个上传操作和其他的Action有关联关系,所以不好直接全部让外部开发者去操作,操作不当会出问题,对外暴露的越简单越好,这个单线程就算不写在这里,真正开发者上传的时候还是要用的。

@Caij
Copy link

Caij commented Jan 31, 2019

@Richard-Cao 暴露文件有可能开发者把源文件误删除这个问题,我也考虑过。

@Richard-Cao
Copy link
Member

@Caij 其实还是暴露一个方法让开发者上传完文件之后调一下,是今天的就删除copy,不是就不操作,就好了

@Caij
Copy link

Caij commented Jan 31, 2019

总觉得里面写了一个上传ExecutorService有点浪费这个线程池。

@Richard-Cao
Copy link
Member

一个单线程池,这里不写外面开发者上传的时候还得写,起码得写个线程,而且多次上传网络又不是很好的情况下,单线程池就比较好用了

@Caij
Copy link

Caij commented Jan 31, 2019

因为外部上传文件基本是异步, 有自己配置的线程池复用, 用不上这个线程池, 有点浪费, 而且这个是在实例化LoganThread的时候就创建了,如果你们权衡需要有线程池的话可以在触发上传操作再实例化这个线程池吧。 但是不用这个线程池又可能开发者不用异步,导致写log阻塞。

@Richard-Cao
Copy link
Member

哦我明白你的意思了,延迟初始化也行,在上传的时候再初始化。

@Richard-Cao
Copy link
Member

@lingyanluoxue 按照demo的方式,sendLog里是一个同步请求,所以每次都可以获取到结果,删除文件。如果sendLog里执行的是异步方法,就不行了。

@lingyanluoxue
Copy link
Author

对,是这样的,所以会出现还未上传就已经删除的情况

@Richard-Cao
Copy link
Member

各位可以看看这个PR #67

@Richard-Cao
Copy link
Member

Android已更新到1.2.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants