Browse Source

优化日志记录器

drake 4 years ago
parent
commit
7c43ddcf13
20 changed files with 58 additions and 89 deletions
  1. 10 10
      kalle/src/main/java/com/yanzhenjie/kalle/Request.java
  2. 2 2
      kalle/src/main/java/com/yanzhenjie/kalle/Response.java
  3. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/ConnectException.kt
  4. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/ConnectTimeoutError.kt
  5. 2 5
      kalle/src/main/java/com/yanzhenjie/kalle/exception/DownloadError.kt
  6. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/HostError.kt
  7. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/NetworkError.kt
  8. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/NoCacheError.kt
  9. 1 4
      kalle/src/main/java/com/yanzhenjie/kalle/exception/ParseError.kt
  10. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/ReadException.kt
  11. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/ReadTimeoutError.kt
  12. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/URLError.kt
  13. 0 3
      kalle/src/main/java/com/yanzhenjie/kalle/exception/WriteException.kt
  14. 20 19
      kalle/src/main/java/com/yanzhenjie/kalle/recorder/LogRecorder.kt
  15. 14 15
      kalle/src/main/java/com/yanzhenjie/kalle/simple/BasicWorker.java
  16. 1 1
      kalle/src/main/java/com/yanzhenjie/kalle/simple/Converter.kt
  17. 1 2
      net/src/main/java/com/drake/net/NetConfig.kt
  18. 1 1
      net/src/main/java/com/drake/net/convert/DefaultConvert.kt
  19. 5 2
      net/src/main/java/com/drake/net/error/ResponseException.kt
  20. 1 1
      sample/src/main/java/com/drake/net/sample/callback/NetInterceptor.kt

+ 10 - 10
kalle/src/main/java/com/yanzhenjie/kalle/Request.java

@@ -38,10 +38,10 @@ public abstract class Request {
     private final int mReadTimeout;
     private final int mReadTimeout;
     private final Object mTag;
     private final Object mTag;
     private final Object uid;
     private final Object uid;
-    private String logId = LogRecorder.INSTANCE.generateId();
-    private String logRequestBody;
-    private long requestTime = System.currentTimeMillis();
     private String location;
     private String location;
+    private String logId = LogRecorder.INSTANCE.generateId();
+    private String log;
+    private long timeMillis = System.currentTimeMillis();
 
 
     /**
     /**
      * 请求Id, 每个请求都有独一无二的Id
      * 请求Id, 每个请求都有独一无二的Id
@@ -53,24 +53,24 @@ public abstract class Request {
     /**
     /**
      * 请求开始时间
      * 请求开始时间
      */
      */
-    public long getRequestStartTime() {
-        return requestTime;
+    public long getTimeMillis() {
+        return timeMillis;
     }
     }
 
 
     /**
     /**
      * 请求体
      * 请求体
      */
      */
-    public String logRequestBody() {
-        if (logRequestBody == null) {
+    public String getLog() {
+        if (log == null) {
             return copyParams().toString();
             return copyParams().toString();
-        } else return logRequestBody;
+        } else return log;
     }
     }
 
 
     /**
     /**
      * 设置一个请求体, 默认使用copyParams()
      * 设置一个请求体, 默认使用copyParams()
      */
      */
-    public void logRequestBody(String logRequestBody) {
-        this.logRequestBody = logRequestBody;
+    public void setLog(String log) {
+        this.log = log;
     }
     }
 
 
     /**
     /**

+ 2 - 2
kalle/src/main/java/com/yanzhenjie/kalle/Response.java

@@ -43,11 +43,11 @@ public final class Response implements Closeable {
     /**
     /**
      * 设置日志信息
      * 设置日志信息
      */
      */
-    public void setLogBody(String logBody) {
+    public void setLog(String logBody) {
         this.logBody = logBody;
         this.logBody = logBody;
     }
     }
 
 
-    public String getLogBody() {
+    public String getLog() {
         return logBody;
         return logBody;
     }
     }
 
 

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/ConnectException.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/13.
- */
 open class ConnectException(
 open class ConnectException(
     request: Request,
     request: Request,
     message: String = "",
     message: String = "",

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/ConnectTimeoutError.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/22.
- */
 class ConnectTimeoutError(
 class ConnectTimeoutError(
     request: Request,
     request: Request,
     message: String = "",
     message: String = "",

+ 2 - 5
kalle/src/main/java/com/yanzhenjie/kalle/exception/DownloadError.kt

@@ -18,12 +18,9 @@ package com.yanzhenjie.kalle.exception
 import com.yanzhenjie.kalle.Headers
 import com.yanzhenjie.kalle.Headers
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/3/18.
- */
 class DownloadError(
 class DownloadError(
-    code: Int,
-    headers: Headers,
+    val code: Int,
+    val headers: Headers,
     request: Request,
     request: Request,
     message: String = ""
     message: String = ""
 ) : NetException(request, message)
 ) : NetException(request, message)

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/HostError.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/22.
- */
 class HostError(
 class HostError(
     request: Request,
     request: Request,
     message: String = "",
     message: String = "",

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/NetworkError.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/22.
- */
 class NetworkError(
 class NetworkError(
     request: Request,
     request: Request,
     message: String = ""
     message: String = ""

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/NoCacheError.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/26.
- */
 class NoCacheError(
 class NoCacheError(
     request: Request,
     request: Request,
     message: String = ""
     message: String = ""

+ 1 - 4
kalle/src/main/java/com/yanzhenjie/kalle/exception/ParseError.kt

@@ -17,12 +17,9 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/27.
- */
 
 
 class ParseError(
 class ParseError(
     request: Request,
     request: Request,
     message: String = "An exception occurred while parsing the data",
     message: String = "An exception occurred while parsing the data",
     cause: Throwable? = null
     cause: Throwable? = null
-                ) : NetException(request, message, cause)
+) : NetException(request, message, cause)

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/ReadException.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/13.
- */
 open class ReadException(
 open class ReadException(
     request: Request,
     request: Request,
     cause: Throwable? = null
     cause: Throwable? = null

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/ReadTimeoutError.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/24.
- */
 class ReadTimeoutError(
 class ReadTimeoutError(
     request: Request,
     request: Request,
     message: String = "",
     message: String = "",

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/URLError.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/22.
- */
 class URLError(
 class URLError(
     request: Request,
     request: Request,
     message: String = "",
     message: String = "",

+ 0 - 3
kalle/src/main/java/com/yanzhenjie/kalle/exception/WriteException.kt

@@ -17,9 +17,6 @@ package com.yanzhenjie.kalle.exception
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
 
 
-/**
- * Created by Zhenjie Yan on 2018/2/24.
- */
 class WriteException constructor(
 class WriteException constructor(
     request: Request,
     request: Request,
     cause: Throwable? = null
     cause: Throwable? = null

+ 20 - 19
kalle/src/main/java/com/yanzhenjie/kalle/recorder/LogRecorder.kt

@@ -96,39 +96,42 @@ object LogRecorder {
      */
      */
     fun recordResponse(
     fun recordResponse(
         id: String,
         id: String,
-        code: String,
+        requestMillis: Long,
+        code: Int,
         headers: Map<String, List<String>>,
         headers: Map<String, List<String>>,
         body: String?
         body: String?
     ) {
     ) {
         if (!enabled) return
         if (!enabled) return
         largeLog(id, MessageType.RESPONSE_BODY, body)
         largeLog(id, MessageType.RESPONSE_BODY, body)
-        logWithHandler(id, MessageType.RESPONSE_STATUS, code, 0)
+        logWithHandler(id, MessageType.RESPONSE_STATUS, code.toString(), 0)
         for ((key, value) in headers) {
         for ((key, value) in headers) {
             var header = value.toString()
             var header = value.toString()
             if (header.length > 2) header = header.substring(1, header.length - 1)
             if (header.length > 2) header = header.substring(1, header.length - 1)
             logWithHandler(id, MessageType.RESPONSE_HEADER, key + HEADER_DELIMITER + header, 0)
             logWithHandler(id, MessageType.RESPONSE_HEADER, key + HEADER_DELIMITER + header, 0)
         }
         }
+        logWithHandler(id, MessageType.RESPONSE_TIME, (System.currentTimeMillis() - requestMillis).toString(), 0)
+        logWithHandler(id, MessageType.RESPONSE_END, "-->", 0)
     }
     }
 
 
     /**
     /**
      * 发送请求异常到记录器
      * 发送请求异常到记录器
      *
      *
      * @param id 请求的唯一标识符
      * @param id 请求的唯一标识符
+     * @param requestMillis 请求时间毫秒值
+     * @param errorMessage 错误信息, 如果存在\n换行符, 仅接受最后一行
      */
      */
-    fun recordException(id: String, response: Exception) {
-        if (!enabled) return
-        logWithHandler(id, MessageType.RESPONSE_ERROR, response.localizedMessage, 0)
-    }
-
-    /**
-     * 发送请求到响应时间间隔
-     *
-     * @param id 请求的唯一标识符
-     * @param duration 间隔时间
-     */
-    fun recordDuration(id: String, duration: Long) {
+    fun recordException(
+        id: String,
+        requestMillis: Long,
+        code: Int?,
+        response: String?,
+        errorMessage: String?
+    ) {
         if (!enabled) return
         if (!enabled) return
-        logWithHandler(id, MessageType.RESPONSE_TIME, duration.toString(), 0)
+        largeLog(id, MessageType.RESPONSE_BODY, response)
+        logWithHandler(id, MessageType.RESPONSE_STATUS, code.toString(), 0)
+        logWithHandler(id, MessageType.RESPONSE_ERROR, errorMessage, 0)
+        logWithHandler(id, MessageType.RESPONSE_TIME, (System.currentTimeMillis() - requestMillis).toString(), 0)
         logWithHandler(id, MessageType.RESPONSE_END, "-->", 0)
         logWithHandler(id, MessageType.RESPONSE_END, "-->", 0)
     }
     }
 
 
@@ -180,11 +183,9 @@ object LogRecorder {
                         e.printStackTrace()
                         e.printStackTrace()
                     }
                     }
                 }
                 }
-                val data = bundle.getString(KEY_VALUE)
+                val data = bundle.getString(KEY_VALUE) ?: "null"
                 val key = bundle.getString(KEY_TAG)
                 val key = bundle.getString(KEY_TAG)
-                if (data != null && key != null) {
-                    Log.v(key, data)
-                }
+                Log.v(key, data)
             }
             }
         }
         }
     }
     }

+ 14 - 15
kalle/src/main/java/com/yanzhenjie/kalle/simple/BasicWorker.java

@@ -36,7 +36,7 @@ import java.util.concurrent.Callable;
 import static com.yanzhenjie.kalle.Headers.KEY_IF_MODIFIED_SINCE;
 import static com.yanzhenjie.kalle.Headers.KEY_IF_MODIFIED_SINCE;
 import static com.yanzhenjie.kalle.Headers.KEY_IF_NONE_MATCH;
 import static com.yanzhenjie.kalle.Headers.KEY_IF_NONE_MATCH;
 
 
-abstract class BasicWorker<T extends SimpleRequest, Succeed> implements Callable<Succeed>, Canceller {
+abstract class BasicWorker<T extends SimpleRequest, S> implements Callable<S>, Canceller {
 
 
     private static final long MAX_EXPIRES = System.currentTimeMillis() + 100L * 365L * 24L * 60L * 60L * 1000L;
     private static final long MAX_EXPIRES = System.currentTimeMillis() + 100L * 365L * 24L * 60L * 60L * 1000L;
 
 
@@ -53,14 +53,14 @@ abstract class BasicWorker<T extends SimpleRequest, Succeed> implements Callable
     }
     }
 
 
     @Override
     @Override
-    public final Succeed call() throws Exception {
+    public final S call() throws Exception {
         Response response = tryReadCacheBefore();
         Response response = tryReadCacheBefore();
         if (response != null) return buildSimpleResponse(response, true);
         if (response != null) return buildSimpleResponse(response, true);
 
 
         tryAttachCache();
         tryAttachCache();
         try {
         try {
             Request request = mRequest.request();
             Request request = mRequest.request();
-            LogRecorder.INSTANCE.recordRequest(request.logId(), request.location(), request.method().toString(), request.headers().toMap(), request.logRequestBody());
+            LogRecorder.INSTANCE.recordRequest(request.logId(), request.location(), request.method().toString(), request.headers().toMap(), request.getLog());
 
 
             response = requestNetwork(mRequest);
             response = requestNetwork(mRequest);
 
 
@@ -89,8 +89,14 @@ abstract class BasicWorker<T extends SimpleRequest, Succeed> implements Callable
                 return buildSimpleResponse(cacheResponse, true);
                 return buildSimpleResponse(cacheResponse, true);
             }
             }
             Request request = mRequest.request();
             Request request = mRequest.request();
-            LogRecorder.INSTANCE.recordException(request.logId(), e);
-            LogRecorder.INSTANCE.recordDuration(request.logId(), System.currentTimeMillis() - request.getRequestStartTime());
+
+            String errorMsg = null;
+            int code = 0;
+            if (response != null) {
+                errorMsg = response.getLog();
+                code = response.code();
+            }
+            LogRecorder.INSTANCE.recordException(request.logId(), request.getTimeMillis(), code, e.getLocalizedMessage(), errorMsg);
             throw e;
             throw e;
         } finally {
         } finally {
             IOUtils.closeQuietly(response);
             IOUtils.closeQuietly(response);
@@ -286,22 +292,15 @@ abstract class BasicWorker<T extends SimpleRequest, Succeed> implements Callable
                 .build();
                 .build();
     }
     }
 
 
-    private Succeed buildSimpleResponse(Response response, boolean cache) throws IOException {
+    private S buildSimpleResponse(Response response, boolean cache) throws IOException {
         Request request = mRequest.request();
         Request request = mRequest.request();
         try {
         try {
-            Succeed result = mConverter.convert(mSucceed, request, response, cache);
-
-            LogRecorder.INSTANCE.recordResponse(request.logId(), String.valueOf(response.code()), response.headers().toMap(), response.getLogBody());
-            LogRecorder.INSTANCE.recordDuration(request.logId(), System.currentTimeMillis() - request.getRequestStartTime());
-
+            S result = mConverter.convert(mSucceed, request, response, cache);
+            LogRecorder.INSTANCE.recordResponse(request.logId(), request.getTimeMillis(), response.code(), response.headers().toMap(), response.getLog());
             return result;
             return result;
         } catch (NetException e) {
         } catch (NetException e) {
-            LogRecorder.INSTANCE.recordException(request.logId(), e);
-            LogRecorder.INSTANCE.recordDuration(request.logId(), System.currentTimeMillis() - request.getRequestStartTime());
             throw e;
             throw e;
         } catch (Exception e) {
         } catch (Exception e) {
-            LogRecorder.INSTANCE.recordException(request.logId(), e);
-            LogRecorder.INSTANCE.recordDuration(request.logId(), System.currentTimeMillis() - request.getRequestStartTime());
             throw new ParseError(request, "An exception occurred while parsing the data", e);
             throw new ParseError(request, "An exception occurred while parsing the data", e);
         }
         }
     }
     }

+ 1 - 1
kalle/src/main/java/com/yanzhenjie/kalle/simple/Converter.kt

@@ -36,7 +36,7 @@ interface Converter {
                                      cache: Boolean): S? {
                                      cache: Boolean): S? {
                 if (succeed === String::class.java) {
                 if (succeed === String::class.java) {
                     val string = response.body().string()
                     val string = response.body().string()
-                    response.logBody = string
+                    response.log = string
                     return string as S
                     return string as S
                 }
                 }
                 return null
                 return null

+ 1 - 2
net/src/main/java/com/drake/net/NetConfig.kt

@@ -33,7 +33,6 @@ import com.drake.net.scope.DialogCoroutineScope
 import com.drake.tooltip.toast
 import com.drake.tooltip.toast
 import com.yanzhenjie.kalle.Kalle
 import com.yanzhenjie.kalle.Kalle
 import com.yanzhenjie.kalle.KalleConfig
 import com.yanzhenjie.kalle.KalleConfig
-import com.yanzhenjie.kalle.connect.BroadcastNetwork
 import com.yanzhenjie.kalle.exception.*
 import com.yanzhenjie.kalle.exception.*
 import com.yanzhenjie.kalle.simple.cache.DiskCacheStore
 import com.yanzhenjie.kalle.simple.cache.DiskCacheStore
 import java.util.concurrent.ExecutionException
 import java.util.concurrent.ExecutionException
@@ -117,7 +116,7 @@ fun Application.initNet(host: String, config: KalleConfig.Builder.() -> Unit = {
     app = this
     app = this
     val builder = KalleConfig.newBuilder()
     val builder = KalleConfig.newBuilder()
     builder.apply {
     builder.apply {
-        network(BroadcastNetwork(this@initNet))
+        // network(BroadcastNetwork(this@initNet))
         config()
         config()
     }
     }
     Kalle.setConfig(builder.build())
     Kalle.setConfig(builder.build())

+ 1 - 1
net/src/main/java/com/drake/net/convert/DefaultConvert.kt

@@ -50,7 +50,7 @@ abstract class DefaultConvert(
         cache: Boolean
         cache: Boolean
     ): S? {
     ): S? {
         val body = response.body().string()
         val body = response.body().string()
-        response.logBody = body  // 日志记录响应信息
+        response.log = body  // 日志记录响应信息
         val code = response.code()
         val code = response.code()
         when {
         when {
             code in 200..299 -> { // 请求成功
             code in 200..299 -> { // 请求成功

+ 5 - 2
net/src/main/java/com/drake/net/error/ResponseException.kt

@@ -14,6 +14,8 @@
  * limitations under the License.
  * limitations under the License.
  */
  */
 
 
+@file:Suppress("MemberVisibilityCanBePrivate")
+
 package com.drake.net.error
 package com.drake.net.error
 
 
 import com.yanzhenjie.kalle.Request
 import com.yanzhenjie.kalle.Request
@@ -28,5 +30,6 @@ import com.yanzhenjie.kalle.exception.NetException
 class ResponseException(
 class ResponseException(
     val code: Int,
     val code: Int,
     val msg: String,
     val msg: String,
-    request: Request
-) : NetException(request, "$code $msg")
+    request: Request,
+    val tag: Any? = null
+) : NetException(request, "$code $msg")

+ 1 - 1
sample/src/main/java/com/drake/net/sample/callback/NetInterceptor.kt

@@ -27,7 +27,7 @@ class NetInterceptor : Interceptor {
     override fun intercept(chain: Chain): Response {
     override fun intercept(chain: Chain): Response {
         val request = chain.request()
         val request = chain.request()
 
 
-        request.logRequestBody()
+        request.getLog()
 
 
         val tag = request.tag() as TAG
         val tag = request.tag() as TAG