改造 - >登录到文件

时间:2014-11-18 17:11:54

标签: android logging retrofit

我正在使用自定义记录器将两者都记录到Logcat和文件(当文件启用时)。

这在接收测试人员的错误报告时非常有用(因为我在应用程序中还有一个按钮,可以发送附带日志的错误报告)。

问题:我正在使用RetroFit,但我没有我如何拦截它的日志,如果可能的话,还可以使用我自己的自定义记录器将它们发送到文件。< / p>

有可能吗?

4 个答案:

答案 0 :(得分:5)

使用

构建Logger时,可以将Logger添加到RestAdapter
new RestAdapter.Builder()
... other methods
.setLogLevel(RestAdapter.LogLevel.FULL)
.setLog(new RestAdapter.Log() {
        @Override
        public void log(String message) {
           // code for storing logs in file
        }
    })
.build();

你应该将loglevel调整到适合你的水平

答案 1 :(得分:5)

在改造2中:

OkHttpClient.Builder builder = new OkHttpClient.Builder();
...
HttpLoggingInterceptor.Logger fileLogger = new HttpLoggingInterceptor.Logger() {
    @Override
    public void log(String s) {
        writeToFile(s);
    }
}
Interceptor fileLoggerInterceptor = new HttpLoggingInterceptor(fileLogger);
builder.addInterceptor(fileLoggerInterceptor);
....

writeToFile是您实际写入文件系统的地方

例如:

try {
    FileOutputStream outputStream = mContext.openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
    outputStream.write(data.getBytes());
    outputStream.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

答案 2 :(得分:1)

以OkHttp Logger拦截器(https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor)作为起点是有意义的。然后将所有输出重定向到该文件。因此,您可以使用网址,标题和内容获得漂亮的日志。

答案 3 :(得分:0)

   val logging = HttpLoggingInterceptor(object : HttpLoggingInterceptor.Logger {
            override fun log(message: String) {
                LogUtils.d(TAG, message) //my logger which save logs into file
            }
        }
        )
        logging.level = HttpLoggingInterceptor.Level.BODY

        val okHttpClient: OkHttpClient = OkHttpClient.Builder()
            .addInterceptor(logging)
            .build()

它对我有用。