Nginx设置日志打印post请求参数的方法

【前言】

我们项目的短信功能是接第三方,原来对接第三方给我们回执确认请求是get请求我们在排查问题的时候可以通过nginx的日志拿到对方给我们请求的参数;最近我们换了另外一家第三方,新的第三方给我们的确认请求是post,遇到问题排查,发现nginx没有打印具体参数,于是查阅一些资料和运维一起做了实验和线上调整,调整后我们可以拿到请求参数,更方便我们排查问题;

【Nginx设置打印post请求参数】

           一、Nginx配置文件(nginx.conf)设置打印post请求参数:在http模块的log_format中增加 "dm":$request_body 防止中文乱码,增加  escape=json

 log_format main escape=json '{ "@timestamp": "$time_iso8601", '
            '"remote_addr": "$remote_addr",'
            '"costime": "$request_time",'
            '"realtime": "$upstream_response_time",'
            '"status": $status,'
            '"x_forwarded": "$http_x_forwarded_for",'
            '"referer": "$http_referer",'
            '"request": "$request",'
            '"upstr_addr": "$upstream_addr",'
            '"bytes":$body_bytes_sent,'
            '"dm":$request_body,'
            '"agent": "$http_user_agent" }';

   access_log /var/log/nginx/access.log main;

           二、设置前后的效果对比

1、发送请求的json格式

{
  "results":[
    {
   "price":{
        "pricePerMessage":0.01,
        "currency":"aaa"
      },
      "messageId":"ff4804ef-6ab6-4abd-984d-ab3b1387e852",
      "to":"385981178",
      "sentAt":"2015-02-12T09:58:20.323+0100",
      "doneAt":"2015-02-12T09:58:20.337+0100",
      "smsCount":1,
      "status":{
        "id":5,
        "groupId":3,
        "groupName":"DELIVERED",
        "name":"DELIVERED_TO_HANDSET",
        "description":"Message delivered to handset"
      },
      "error":{
        "groupId":0,
        "groupName":"OK",
        "id":0,
        "name":"NO_ERROR",
        "description":"No Error",
        "permanent":false
      }
    }
  ]
}

2、设置前post请求,nginx打印的结果,很显然没有将参数打印出来

3、设置后post请求,nginx打印参数,发现参数虽然打印出来但是有乱码情况

4、解决乱码

(1)需要在log_format main后加 escape=json

(2)nginx的版本需要是1.15.1及以上

(3)满足以上最终打印出的结果

           三、看nginx日志必要性

1、更加全面:它可以记录访问者的ip浏览器以及请求参数等信息比java的请求日志更加全面;

2、请求大时,java程序处理不过来,这时java日志没有多余访问请求,而nginx中有,有利于排查问题,优化系统性能。

【总结】

1、通过日志可以快速定位问题;

2、排查问题时考虑要全面,从多过维度去思考。

到此这篇关于Nginx设置日志打印post请求参数的方法的文章就介绍到这了,更多相关Nginx 日志打印post请求参数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Nginx日志按日期切割详解(按天切割)

    实现需求 本文实现的功能是在吗每天凌晨00:00把前一天的Nginx日志access.log重命名为access-xxxx-xx-xx.log格式,例如:access-2016-10-01.log,下面话不多说了,来看看详细的实现方法吧. 实现方法 脚本 vim /opt/nginx/cut_nginx_log.sh #!/bin/bash #此脚本用于自动分割Nginx的日志,包括access.log和error.log #每天00:00执行此脚本 将前一天的access.log重命名为acc

  • nginx服务器中access_log日志分析与配置详解

    前言 nginx的log日志分为:access log 和 error log 其中access log 记录了哪些用户,哪些页面以及用户浏览器.ip和其他的访问信息 error log 则是记录服务器错误日志 log_format 日志格式语法: log_format name(格式名字) 格式样式(即想要得到什么样的日志内容) 示例: log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$

  • nginx日志中添加请求的response日志(推荐)

    由于此功能在nginx内置的功能中没有,需要安装第三方模块ngx_lua,由于此模块需要Lua语言,所以需要安装相应的Lua语言包 1. 下载安装LuaJIT # cd /usr/local/src # wget http://luajit.org/download/LuaJIT-2.0.2.tar.gz # tar -xzvf LuaJIT-2.0.2.tar.gz # cd LuaJIT-2.0.2 # make 出现如下内容表示编译成功 OK Successfully built LuaJ

  • nginx中用JSON格式记录日志的配置示例

    nginx的日志配置可以参见<nginx日志配置指令详解>一文.如果要想以json格式记录nginx日志以便logstash分析,该如何指定日志格式呢?可以按照下面的格式来实现. 定义nginx日志格式: 复制代码 代码如下: log_format logstash_json '{ "@timestamp": "$time_local", '                          '"@fields": { '      

  • nginx日志配置指令详解

    日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如access_log.log_format.open_log_file_cache.log_not_found.log_subrequest.rewrite_log.error_log. nginx有一个非常灵活的日志记录模式.每个级别的配置可以有各自独立的访问日志.日志格式通过log_format命令来定义.ngx_http_log_module是用来定义请求日志格式的. 1. access_log指令 语法: access_

  • Nginx实现浏览器可实时查看访问日志的步骤详解

    一.首先查看nginx版本,我使用的是1.9.7的版本,安装目录在/application/nginx-1.9.7 [root@AnSheng ~]# /application/nginx-1.9.7/sbin/nginx -V nginx version: nginx/1.9.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) configure arguments: --prefix=/application/nginx-1.9.7

  • nginx关闭favicon.ico、robots.txt日志记录配置

    nginx日志最近发生大量访问favicon.ico无法找到的404错误日志,小编感觉很影响服务器性能,对于一个高并发的服务器每一个错误都会影响性能,所以需要关闭访问favicon.ico的日志记录功能. 复制代码 代码如下: # 把以下配置放到 server {} 块. #关闭favicon.ico不存在时记录日志location = /favicon.ico {log_not_found off;access_log off;} location = /robots.txt {allow a

  • Nginx设置日志打印post请求参数的方法

    [前言] 我们项目的短信功能是接第三方,原来对接第三方给我们回执确认请求是get请求我们在排查问题的时候可以通过nginx的日志拿到对方给我们请求的参数:最近我们换了另外一家第三方,新的第三方给我们的确认请求是post,遇到问题排查,发现nginx没有打印具体参数,于是查阅一些资料和运维一起做了实验和线上调整,调整后我们可以拿到请求参数,更方便我们排查问题: [Nginx设置打印post请求参数]            一.Nginx配置文件(nginx.conf)设置打印post请求参数:在h

  • SpringMVC获取请求参数实现方法介绍

    目录 一.通过ServletAPI获取 二.通过控制器方法的形参获取请求参数 三.@RequestParam 四.@RequestHeader 五.@CookieValue 六.通过POJO获取请求参数 七.解决获取请求参数的乱码问题 我们已经学习过@RequestMapping了,学的属性可能比较多,但是我们常用的也就value和method.所以说我们已经可以把我们的浏览器发送的请求和控制器方法来创建映射关系了. 一.通过ServletAPI获取 将HttpServletRequest作为控

  • centos6.5服务器安装Nginx设置服务和开机自启的方法

    本文介绍了centos6.5服务器安装Nginx设置服务和开机自启的方法,分享给大家,也给自己留个笔记 1.安装Nginx及其依赖 首先是老套路,使用ssh链接服务器,还记得以前的代码吗? ssh -t 用户名@服务器IP或者域名 -p 22 <!--用户名一般是root,方便操作,我的登录代码如下--> ssh -t root@acheng1314.cn -p 22 在终端中输入上面命令按下回车,要求我们输入密码,这个密码是不可见的,所以一定要输入正确. 链接到服务器后,我们切换到常用的安装

  • jQuery获取URL请求参数的方法

    本文实例讲述了jQuery获取URL请求参数的方法.分享给大家供大家参考.具体如下: $.extend({ getUrlVars: function(){ var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].

  • 基于express中路由规则及获取请求参数的方法

    express中常见的路由规则 主要使用的路由规则是get和post两种,即 var express = require('express'); var app = express(); app.get(); // get和post两种请求方式 app.post(); app.get()和app.post()的第一个参数为请求路径,第二个参数为处理请求的回调函数:回调函数有两个参数,分别为req和res,代表请求信息和响应信息. 获取请求路径和请求体中的各种参数 路径请求及对应获取请求路径的形式

  • python opencv设置摄像头分辨率以及各个参数的方法

    1,为了获取视频,你应该创建一个 VideoCapture 对象.他的参数可以是设备的索引号,或者是一个视频文件.设备索引号就是在指定要使用的摄像头.一般的笔记本电脑都有内置摄像头.所以参数就是 0.你可以通过设置成 1 或者其他的来选择别的摄像头.之后,你就可以一帧一帧的捕获视频了.但是最后,别忘了停止捕获视频.使用 ls /dev/video*命令可以查看摄像头设备 2,cap.read() 返回一个布尔值(True/False).如果帧读取的是正确的,就是 True.所以最后你可以通过检查

  • laravel请求参数校验方法

    对于后端开发而言,前端request请求中的参数校验是一个必不可少的环节.无论传来的参数是id还是email还是其他的参数,我们都要对参数的类型.大小.格式等等做这样或者那样的校验,然后才进行逻辑处理,以确保逻辑处理时万无一失,不会出现异样.于是乎,在controller层中就会出现一大坨的校验代码,这些校验代码甚至有时候都超过了正常的逻辑代码的数量,对于程序的扩展和维护很不利的. 但是,laravel为我们提供了一个很好的服务去解决参数校验这个问题,它就是----Validate. 首先,我们

  • django日志默认打印request请求信息的方法示例

    需求 请求view中手动打印日志时中插入request的如下信息(每个request请求都记录可以使用中间件进行解决,但这里仅仅是在需要的地方手动打印): #统一附加日志内容 ADD_LOG = r'''{"username": request.user, "path": request.path, "request_id": request.id, "login_id": request.login_id}''' 旧的解决办

  • Nginx设置为Node.js的前端服务器方法总结

    1.安装node.js 首先安装node.js安装所需的软件包,并在启动板上添加可用的nodejs的PPA.之后使用以下命令安装nodejs. $ sudo apt-get install python-software-properties python g++ make $ sudo add-apt-repository ppa:chris-lea/node.js $ sudo apt-get update $ sudo apt-get install nodejs 2.安装nginx 现在

  • SpringCloud Gateway之请求应答日志打印方式

    目录 Gateway请求应答日志打印 第一步 第二步 Gateway全局请求日志打印 把请求体的数据存入exchange 编写全局日志拦截器代码 在代码中配置全局拦截器 Gateway请求应答日志打印 请求应答日志时在日常开发调试问题的重要手段之一,那么如何基于Spring Cloud Gateway做呢,请看我上代码. 第一步 创建RecorderServerHttpRequestDecorator,缓存请求参数,解决body只能读一次问题. public class RecorderServ

随机推荐