From c5ee12f931cc13bc6ef144c1ae6abc6d09541877 Mon Sep 17 00:00:00 2001
From: zhaoxiang <zhaoxiang051405@gmail.com>
Date: Mon, 1 Jul 2019 14:42:38 +0800
Subject: [PATCH] =?UTF-8?q?modified=20=E5=A4=84=E7=90=86=E5=85=A8=E9=83=A8?=
 =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82=E6=B5=81=E7=A8=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 application/api/controller/Base.php           |  5 +-
 application/api/controller/BuildToken.php     |  2 -
 application/http/middleware/ApiLog.php        | 26 ++++++++--
 application/http/middleware/ApiResponse.php   | 10 ++--
 .../util/{ApiLog.php => ApiLogTool.php}       | 48 ++++++++-----------
 5 files changed, 48 insertions(+), 43 deletions(-)
 rename application/util/{ApiLog.php => ApiLogTool.php} (63%)

diff --git a/application/api/controller/Base.php b/application/api/controller/Base.php
index 9fde9cd..fad6eaa 100644
--- a/application/api/controller/Base.php
+++ b/application/api/controller/Base.php
@@ -8,7 +8,6 @@
 namespace app\api\controller;
 
 
-use app\util\ApiLog;
 use app\util\ReturnCode;
 use think\Controller;
 
@@ -18,7 +17,7 @@ class Base extends Controller {
     protected $userInfo = [];
 
     public function _initialize() {
-        $this->userInfo = ApiLog::getUserInfo();
+//        $this->userInfo = ''; 这部分初始化用户信息可以参考admin模块下的Base去自行处理
     }
 
     public function buildSuccess($data, $msg = '操作成功', $code = ReturnCode::SUCCESS) {
@@ -53,4 +52,4 @@ class Base extends Controller {
         }
     }
 
-}
\ No newline at end of file
+}
diff --git a/application/api/controller/BuildToken.php b/application/api/controller/BuildToken.php
index d0fe461..3c6ab26 100644
--- a/application/api/controller/BuildToken.php
+++ b/application/api/controller/BuildToken.php
@@ -9,7 +9,6 @@ namespace app\api\controller;
 
 
 use app\model\AdminApp;
-use app\util\ApiLog;
 use app\util\ReturnCode;
 use app\util\Strs;
 
@@ -48,7 +47,6 @@ class BuildToken extends Base {
         }
         $accessToken = $this->buildAccessToken($appInfo['app_id'], $appInfo['app_secret']);
         $appInfo['device_id'] = $param['device_id'];
-        ApiLog::setAppInfo($appInfo);
         cache('AccessToken:' . $accessToken, $appInfo, $expires);
         cache('AccessToken:' . $param['device_id'], $accessToken, $expires);
         $return['access_token'] = $accessToken;
diff --git a/application/http/middleware/ApiLog.php b/application/http/middleware/ApiLog.php
index 54b43e7..0c18e3a 100644
--- a/application/http/middleware/ApiLog.php
+++ b/application/http/middleware/ApiLog.php
@@ -2,10 +2,26 @@
 
 namespace app\http\middleware;
 
-class ApiLog
-{
-    public function handle($request, \Closure $next)
-    {
-        return $next($request);
+use app\util\ApiLogTool;
+
+class ApiLog {
+
+    /**
+     * @param \think\facade\Request $request
+     * @param \Closure $next
+     * @return mixed|\think\response\Json
+     * @author zhaoxiang <zhaoxiang051405@gmail.com>
+     */
+    public function handle($request, \Closure $next) {
+        $response = $next($request);
+
+        ApiLogTool::setApiInfo($request->API_CONF_DETAIL);
+        ApiLogTool::setAppInfo($request->APP_CONF_DETAIL);
+        ApiLogTool::setRequest($request->param());
+        ApiLogTool::setResponse($response->getData());
+        ApiLogTool::setHeader($request->header());
+        ApiLogTool::save();
+
+        return $response;
     }
 }
diff --git a/application/http/middleware/ApiResponse.php b/application/http/middleware/ApiResponse.php
index af1de1f..2431f28 100644
--- a/application/http/middleware/ApiResponse.php
+++ b/application/http/middleware/ApiResponse.php
@@ -2,10 +2,10 @@
 
 namespace app\http\middleware;
 
-class ApiResponse
-{
-    public function handle($request, \Closure $next)
-    {
-        return $next($request);
+use think\facade\Config;
+
+class ApiResponse {
+    public function handle($request, \Closure $next) {
+        return $next($request)->header(Config::get('apiadmin.CROSS_DOMAIN'));
     }
 }
diff --git a/application/util/ApiLog.php b/application/util/ApiLogTool.php
similarity index 63%
rename from application/util/ApiLog.php
rename to application/util/ApiLogTool.php
index 65c214a..7907362 100644
--- a/application/util/ApiLog.php
+++ b/application/util/ApiLogTool.php
@@ -7,44 +7,47 @@
 namespace app\util;
 
 
-class ApiLog {
+use think\facade\Env;
+
+class ApiLogTool {
 
     private static $appInfo = 'null';
     private static $apiInfo = 'null';
     private static $request = 'null';
-    private static $requestAfterFilter = 'null';
     private static $response = 'null';
     private static $header = 'null';
     private static $userInfo = 'null';
-    private static $separator = '###';
+    private static $separator = ' | ';
 
     public static function setAppInfo($data) {
         self::$appInfo =
-            (isset($data['app_id']) ? $data['app_id'] : '') . self::$separator .
-            (isset($data['app_name']) ? $data['app_name'] : '') . self::$separator .
-            (isset($data['device_id']) ? $data['device_id'] : '');
+            (isset($data['app_id']) ? $data['app_id'] : 'null') . self::$separator .
+            (isset($data['app_name']) ? $data['app_name'] : 'null') . self::$separator .
+            (isset($data['device_id']) ? $data['device_id'] : 'null');
     }
 
     public static function setHeader($data) {
-        $userToken = (isset($data['user-token']) && !empty($data['user-token'])) ? $data['user-token'] : 'null';
         $accessToken = (isset($data['access-token']) && !empty($data['access-token'])) ? $data['access-token'] : 'null';
         $version = (isset($data['version']) && !empty($data['version'])) ? $data['version'] : 'null';
-        self::$header = $accessToken . self::$separator . $userToken . self::$separator . $version;
+        self::$header = $accessToken . self::$separator . $version;
     }
 
     public static function setApiInfo($data) {
-        self::$apiInfo = isset($data['apiClass']) ? $data['apiClass'] : '' . self::$separator . isset($data['hash']) ? $data['hash'] : '';
+        self::$apiInfo =
+            (isset($data['hash']) ? $data['hash'] : 'null') . self::$separator .
+            (isset($data['api_class']) ? $data['api_class'] : 'null');
     }
 
+    /**
+     * 这部分的日志其实很关键,但是由于不再强制检测UserToken,所以这部分日志暂时不生效,请大家各自适配
+     * @param $data
+     * @author zhaoxiang <zhaoxiang051405@gmail.com>
+     */
     public static function setUserInfo($data) {
         if (is_array($data) || is_object($data)) {
             $data = json_encode($data);
+            self::$userInfo = $data;
         }
-        self::$userInfo = $data;
-    }
-
-    public static function getUserInfo() {
-        return json_decode(self::$userInfo, true);
     }
 
     public static function setRequest($data) {
@@ -54,13 +57,6 @@ class ApiLog {
         self::$request = $data;
     }
 
-    public static function setRequestAfterFilter($data) {
-        if (is_array($data) || is_object($data)) {
-            $data = json_encode($data);
-        }
-        self::$requestAfterFilter = $data;
-    }
-
     public static function setResponse($data, $code = '') {
         if (is_array($data) || is_object($data)) {
             $data = json_encode($data);
@@ -69,17 +65,13 @@ class ApiLog {
     }
 
     public static function save() {
-        $logPath = RUNTIME_PATH . 'ApiLog' . DS;
-        if (self::$appInfo == 'null') {
-            self::$appInfo = 'null' . self::$separator . 'null' . self::$separator . 'null';
-        }
+        $logPath = Env::get('runtime_path') . 'ApiLog' . DIRECTORY_SEPARATOR;
         $logStr = implode(self::$separator, array(
+            '[' . date('Y-m-d H:i:s') . '] ',
             self::$apiInfo,
-            date('Y-m-d H:i:s'),
             self::$request,
             self::$header,
             self::$response,
-            self::$requestAfterFilter,
             self::$appInfo,
             self::$userInfo
         ));
@@ -97,7 +89,7 @@ class ApiLog {
      */
     public static function writeLog($log, $type = 'sql', $filePath = '') {
         if(!$filePath) {
-            $filePath = '.' . DS . 'runtime' . DS;
+            $filePath = '.' . DIRECTORY_SEPARATOR . 'runtime' . DIRECTORY_SEPARATOR;
         }
         $filename = $filePath . date("Ymd") . '_' . $type . ".log";
         @$handle = fopen($filename, "a+");