diff --git a/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java b/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java index 4603382f78f0e5d61e3bf3fb843d2a3431514061..55c5e275371d26328d75f913e9b327c1b6b11553 100644 --- a/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java +++ b/arms/src/main/java/com/jess/arms/http/log/DefaultFormatPrinter.java @@ -48,9 +48,9 @@ public class DefaultFormatPrinter implements FormatPrinter { private static final String N = "\n"; private static final String T = "\t"; - private static final String REQUEST_UP_LINE = "┌────── Request ────────────────────────────────────────────────────────────────────────"; - private static final String END_LINE = "└───────────────────────────────────────────────────────────────────────────────────────"; - private static final String RESPONSE_UP_LINE = "┌────── Response ───────────────────────────────────────────────────────────────────────"; + private static final String REQUEST_UP_LINE = " ┌────── Request ────────────────────────────────────────────────────────────────────────"; + private static final String END_LINE = " └───────────────────────────────────────────────────────────────────────────────────────"; + private static final String RESPONSE_UP_LINE = " ┌────── Response ───────────────────────────────────────────────────────────────────────"; private static final String BODY_TAG = "Body:"; private static final String URL_TAG = "URL: "; private static final String METHOD_TAG = "Method: @"; @@ -104,15 +104,15 @@ public class DefaultFormatPrinter implements FormatPrinter { /** * 打印网络响应信息, 当网络响应时 {{@link okhttp3.ResponseBody}} 可以解析的情况 * - * @param chainMs 服务器响应耗时(单位毫秒) + * @param chainMs 服务器响应耗时(单位毫秒) * @param isSuccessful 请求是否成功 - * @param code 响应码 - * @param headers 请求头 - * @param contentType 服务器返回数据的数据类型 - * @param bodyString 服务器返回的数据(已解析) - * @param segments 域名后面的资源地址 - * @param message 响应信息 - * @param responseUrl 请求地址 + * @param code 响应码 + * @param headers 请求头 + * @param contentType 服务器返回数据的数据类型 + * @param bodyString 服务器返回的数据(已解析) + * @param segments 域名后面的资源地址 + * @param message 响应信息 + * @param responseUrl 请求地址 */ @Override public void printJsonResponse(long chainMs, boolean isSuccessful, int code, String headers, MediaType contentType, @@ -134,13 +134,13 @@ public class DefaultFormatPrinter implements FormatPrinter { /** * 打印网络响应信息, 当网络响应时 {{@link okhttp3.ResponseBody}} 为 {@code null} 或不可解析的情况 * - * @param chainMs 服务器响应耗时(单位毫秒) + * @param chainMs 服务器响应耗时(单位毫秒) * @param isSuccessful 请求是否成功 - * @param code 响应码 - * @param headers 请求头 - * @param segments 域名后面的资源地址 - * @param message 响应信息 - * @param responseUrl 请求地址 + * @param code 响应码 + * @param headers 请求头 + * @param segments 域名后面的资源地址 + * @param message 响应信息 + * @param responseUrl 请求地址 */ @Override public void printFileResponse(long chainMs, boolean isSuccessful, int code, String headers, @@ -171,11 +171,40 @@ public class DefaultFormatPrinter implements FormatPrinter { int start = i * MAX_LONG_SIZE; int end = (i + 1) * MAX_LONG_SIZE; end = end > line.length() ? line.length() : end; - Timber.tag(tag).i(DEFAULT_LINE + line.substring(start, end)); + Timber.tag(resolveTag(tag)).i(DEFAULT_LINE + line.substring(start, end)); } } } + private static int last; + + private static final String[] ARMS = new String[]{"-A-", "-R-", "-M-", "-S-"}; + + private static String computeKey() { + if (last == 4) { + last = 0; + } + String s = String.valueOf(ARMS[last]); + last++; + return s; + } + + /** + * 此方法是为了解决在 AndroidStudio v3.1 以上 Logcat 输出的日志无法对齐的问题 + *
+ * 此问题引起的原因, 据 JessYan 猜测, 可能是因为 AndroidStudio v3.1 以上将极短时间内以相同 tag 输出多次的 log 自动合并为一次输出 + * 导致本来对称的输出日志, 出现不对称的问题 + * AndroidStudio v3.1 此次对输出日志的优化, 不小心使市面上所有具有日志格式化输出功能的日志框架无法正常工作 + * 现在暂时能想到的解决方案有两个: 1. 改变每行的 tag (每行 tag 都加一个可变化的 token) 2. 延迟每行日志打印的间隔时间 + *
+ * {@link #resolveTag(String)} 使用第一种解决方案 + * + * @param tag + */ + private static String resolveTag(String tag) { + return computeKey() + tag; + } + private static String[] getRequest(Request request) { String log;