【发布时间】:2014-11-18 17:11:54
【问题描述】:
我正在使用自定义记录器来记录Logcat 和文件(启用文件时)。
这在接收来自测试人员的错误报告时确实很有帮助(因为我在应用程序内还有一个按钮可以发送附带日志的错误报告)。
问题:我正在使用RetroFit,但我还没有如何拦截它的日志并将它们也发送到文件,如果可能的话,使用我自己的自定义记录器。
有可能吗?
【问题讨论】:
我正在使用自定义记录器来记录Logcat 和文件(启用文件时)。
这在接收来自测试人员的错误报告时确实很有帮助(因为我在应用程序内还有一个按钮可以发送附带日志的错误报告)。
问题:我正在使用RetroFit,但我还没有如何拦截它的日志并将它们也发送到文件,如果可能的话,使用我自己的自定义记录器。
有可能吗?
【问题讨论】:
在改造 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();
}
【讨论】:
您可以在构建时将 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();
您应该将日志级别调整为适合您的级别
【讨论】:
以 OkHttp Logger Interceptor (https://github.com/square/okhttp/tree/master/okhttp-logging-interceptor) 为起点是有意义的。然后将所有输出重定向到文件。因此,您将获得带有 url、标题、内容的漂亮日志。
【讨论】:
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()
它对我有用。
【讨论】: