当前位置: 首页 > 知识库问答 >
问题:

如何用Android来记录请求和响应体?

谷梁俊楚
2023-03-14

我在改型API中找不到记录完整请求/响应体的相关方法。我希望在探查器中得到一些帮助(但它只提供关于响应的元数据)。我尝试在构建器中设置日志级别,但这也没有帮助:

RestAdapter adapter = (new RestAdapter.Builder()).
                setEndpoint(baseUrl).
                setRequestInterceptor(interceptor).
                setProfiler(profiler).
                setClient(client).
                setExecutors(MyApplication.getWebServiceThreadPool()).
                setLogLevel(LogLevel.FULL).
                setLog(new RestAdapter.Log() {
                    @Override
                    public void log(String msg) {
                        Log.i(TAG, msg);
                    }
                }).
                build();

编辑:此代码正在工作。我不知道为什么它在早些时候不起作用。可能是因为我用的是旧版本的改装。

共有2个答案

闽鸿宝
2023-03-14

改装2.0:

更新:@Marcus Pöhls

登录改装2

改造2完全依赖OkHttp进行任何网络操作。由于OkHttp是Reverfit2的对等依赖项,因此一旦Reverfit2作为稳定版本发布,您就不需要添加额外的依赖项。

OKHTTP2.6.0附带了一个日志拦截器作为内部依赖项,您可以直接将其用于您的改型客户端。改版2.0.0-Beta2仍然使用OkHttp 2.5.0。未来的版本将增加对更高OkHttp版本的依赖。这就是您需要手动导入日志拦截器的原因。将以下行添加到build.gradle文件中的gradle导入中,以获取日志拦截器依赖项。

compile 'com.squareup.okhttp3:logging-interceptor:3.9.0'

您也可以访问Square的GitHub页面来了解这个拦截器

添加日志记录以改进2

在开发应用程序时,出于调试的目的,集成一个日志功能来显示请求和响应信息是很好的。由于在reverfit2中不再默认集成日志记录,我们需要为OKHTTP添加一个日志记录拦截器。幸运的是,OkHttp已经附带了这个拦截器,您只需要为您的OKHttpClient激活它。

HttpLoggingInterceptor logging = new HttpLoggingInterceptor();  
// set your desired log level
logging.setLevel(HttpLoggingInterceptor.Level.BODY);
OkHttpClient.Builder httpClient = new OkHttpClient.Builder();   
// add your other interceptors …
// add logging as last interceptor
httpClient.addInterceptor(logging);  // <-- this is the important line!
Retrofit retrofit = new Retrofit.Builder()  
        .baseUrl(API_BASE_URL)
        .addConverterFactory(GsonConverterFactory.create())
        .client(httpClient.build())
        .build();

我们建议将日志记录作为最后一个拦截器,因为这也会将您使用以前的拦截器添加的信息记录到您的请求中。

日志级别

记录太多的信息会炸毁你的Android监视器,这就是为什么OKHTTP的日志拦截器有四个日志级别:无、基本、头和正文。我们将带您遍历每个日志级别并描述它们的输出。

更多信息请访问:改造2-日志请求和响应

老答:

不再登录改版2。开发团队删除了日志记录功能。老实说,日志记录功能并不可靠。Jake Wharton明确指出,记录的消息或对象是假设的值,它们不能被证明是真的。到达服务器的实际请求可能有一个更改的请求体或其他内容。

即使默认情况下没有集成日志记录,您也可以利用任何Java日志记录程序,并在定制的OkHttp拦截器中使用它。

关于改造2的更多信息,请参阅:改造-入门并创建Android客户端

拓拔元徽
2023-03-14

我使用了setloglevel(loglevel.full).setlog(new AndroidLog(“your_log_tag”)),它对我有帮助。
更新。
您也可以尝试使用reverfit.client.response作为响应模型进行调试

 类似资料:
  • 在Vertx WebClient中记录传出http请求和响应的最简单方法是什么。我正在寻找类似于httpserver LoggerHandler的东西,但接下来是webclient的输出请求。

  • 我试图记录应用程序中的每个传入请求和传出响应。我正在使用jee 6,所以我没有ContainerRequestFilter和ContainerResponseFilter类。所以我决定用滤镜。 我用@WebFilter(“/*”)注释了一个类,并实现了Filter接口。我成功地读取了请求头和请求正文。我也很难阅读响应标题和响应正文。下面是代码片段 MyHttpServletResponse seW

  • 问题内容: 我想记录一个axis2客户端发出的所有请求/响应。我试图在http://code.google.com/support/bin/answer.py?hl=zh_CN&answer=15137中创建一个称为describer 的文件,但没有成功(我没有日志文件)。 请求是通过https发出的,我不确定是否重要。我试过了 和 没有成功。 问题答案: 对于SOAP消息的Axis2客户端日志记

  • 我有一个spring应用程序,它可以与Mobile交换JSON。Spring控制器如下所示: 我想知道,记录http请求正文和响应正文的最佳方式是什么?目前,我有一个定制的json消息转换器,它在从json中创建bean之前记录一个请求正文。我使用CustomTraceInterceptor记录响应正文。不幸的是,CustomTraceInterceptor不允许记录请求正文。 任何更好的解决方案

  • 我正在尝试将API请求负载和响应数据记录到Azure Application Insight。使用跟踪我可以记录。但是我想知道什么是将请求和响应数据记录到application Insight的最佳方法。因为数据是巨大的,所以API调用的数量会更多。我不能仅仅使用跟踪来跟踪数十万个请求和响应数据。我尝试了一些博客,比如使用itelemetryinitializer/httpcontext.feat

  • 应用程序应异步(在单独的线程中)记录以下信息,而不会影响客户端。 请求HTTP方法和URI 如果我们在过滤器中使用,那么spring将无法再次使用它进行json到对象的映射。在输入流到对象映射期间的某个地方,我们可以插入记录器吗? 更新: 我们可以在MessageConverter中编写日志代码,但这似乎不是一个好主意。