Add support for X-Debug-Mode header
diff --git a/conf.d/api_gateway_logging.conf b/conf.d/api_gateway_logging.conf
index d8524fc..c6b4253 100644
--- a/conf.d/api_gateway_logging.conf
+++ b/conf.d/api_gateway_logging.conf
@@ -32,4 +32,5 @@
                       'ua="$http_user_agent" xfwdf="$http_x_forwarded_for" '
                       'upadd="$upstream_addr" upstat=$upstream_status uprt=$upstream_response_time '
                       'tenantId="$tenant" tenantNamespace="$tenantNamespace" tenantInstance="$tenantInstance" '
+                      'requestHeaders="$requestHeaders" requestBody="$requestBody" responseHeaders="$responseHeaders" responseBody="$responseBody" '
                       'apiId="$apiId" apiKey="$apiKey" analyticsUri="$analyticsUri" reqid="$requestId"';
diff --git a/conf.d/managed_endpoints.conf b/conf.d/managed_endpoints.conf
index 9a612d6..3d375e9 100644
--- a/conf.d/managed_endpoints.conf
+++ b/conf.d/managed_endpoints.conf
@@ -72,6 +72,10 @@
         set $analyticsUri '';
         set $cors_origins '';
         set $cors_methods '';
+        set $requestHeaders '';
+        set $requestBody '';
+        set $responseHeaders '';
+        set $responseBody '';
 
         access_by_lua_block {
             local routing = require "routing"
@@ -79,13 +83,21 @@
         }
 
         proxy_pass $upstream;
-        header_filter_by_lua_block { 
+        header_filter_by_lua_block {
             local cors = require "cors"
             cors.replaceHeaders()
         }
+
+        body_filter_by_lua_block {
+          local routing = require "routing"
+          if ngx.req.get_headers()["x-debug-mode"] == "true" then
+            routing.setResponseLogs()
+          end
+        }
     }
 
     location = /health {
+        access_log off;
         proxy_pass http://0.0.0.0:9000/v1/health-check;
     }
 }
diff --git a/conf.d/management_apis.conf b/conf.d/management_apis.conf
index 6f1e953..c8297fc 100644
--- a/conf.d/management_apis.conf
+++ b/conf.d/management_apis.conf
@@ -62,6 +62,7 @@
     }
 
     location /v1/health-check {
+        access_log off;
         access_by_lua_block {
             local requestMethod = ngx.req.get_method()
             if requestMethod == "GET" then
diff --git a/scripts/lua/routing.lua b/scripts/lua/routing.lua
index 94cf3bd..e031bc6 100644
--- a/scripts/lua/routing.lua
+++ b/scripts/lua/routing.lua
@@ -47,6 +47,9 @@
   local gatewayPath = ngx.var.gatewayPath
   local i, j = ngx.var.request_uri:find("/api/([^/]+)")
   ngx.var.analyticsUri = ngx.var.request_uri:sub(j+1)
+  if ngx.req.get_headers()["x-debug-mode"] == "true" then
+    setRequestLogs()
+  end
   local resourceKeys = redis.getAllResourceKeys(red, tenantId)
   local redisKey = _M.findRedisKey(resourceKeys, tenantId, gatewayPath)
   if redisKey == nil then
@@ -99,6 +102,9 @@
     local u = url.parse(cfUrl)
     cfRedisKey = utils.concatStrings({"resources:", tenant, ":", path, u.path})
     ngx.var.analyticsUri = (u.path == "") and "/" or u.path
+    if u.query ~= nil and u.query ~= "" then
+      ngx.var.analyticsUri = utils.concatStrings({ngx.var.analyticsUri, '?', u.query})
+    end
   end
   for _, key in pairs(resourceKeys) do
     if key == redisKey or key == cfRedisKey then
@@ -198,4 +204,19 @@
   end
 end
 
+function setRequestLogs()
+  ngx.var.requestHeaders = cjson.encode(ngx.req.get_headers())
+  ngx.req.read_body()
+  ngx.var.requestBody = ngx.req.get_body_data()
+end
+
+function _M.setResponseLogs()
+  ngx.var.responseHeaders = cjson.encode(ngx.resp.get_headers())
+  local resp_body = ngx.arg[1]
+  ngx.ctx.buffered = (ngx.ctx.buffered or '') .. resp_body
+  if ngx.arg[2] then
+    ngx.var.responseBody = ngx.ctx.buffered
+  end
+end
+
 return _M