我正在使用自定义记录器将两者都记录到Logcat
和文件(当文件启用时)。
这在接收测试人员的错误报告时非常有用(因为我在应用程序中还有一个按钮,可以发送附带日志的错误报告)。
问题:我正在使用RetroFit
,但我没有我如何拦截它的日志,如果可能的话,还可以使用我自己的自定义记录器将它们发送到文件。< / p>
有可能吗?
答案 0 :(得分:5)
使用
构建Logger时,可以将Logger添加到RestAdapternew 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()
它对我有用。