#/*
# * Copyright (c) 2012 Adobe Systems Incorporated. All rights reserved.
# *
# * Permission is hereby granted, free of charge, to any person obtaining a
# * copy of this software and associated documentation files (the "Software"),
# * to deal in the Software without restriction, including without limitation
# * the rights to use, copy, modify, merge, publish, distribute, sublicense,
# * and/or sell copies of the Software, and to permit persons to whom the
# * Software is furnished to do so, subject to the following conditions:
# *
# * The above copyright notice and this permission notice shall be included in
# * all copies or substantial portions of the Software.
# *
# * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# * DEALINGS IN THE SOFTWARE.
# *
# */
log_format  main  '$remote_addr - remote_user="$remote_user" [$time_local] request_method="$request_method" '
                  'request_uri="$request_uri" request_protocol="$server_protocol" '
                  'status=$status bbs=$body_bytes_sent rl=$request_length rt=$request_time hr="$http_referer" '
                  'ua="$http_user_agent" xfwdf="$http_x_forwarded_for"';


log_format  platform  '$remote_addr - remote_user="$remote_user" [$time_local] request_method="$request_method" '
                      'request_uri="$request_uri" request_protocol="$server_protocol" '
                      'status=$status bbs=$body_bytes_sent rl=$request_length rt=$request_time hr="$http_referer" '
                      '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"';
