换个新公司,做一些新鲜的事情,经过一天的琢磨,终于成功添加response日志

在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 LuaJIT
make[1]: Leaving directory `/usr/local/src/LuaJIT-2.0.2/src'
==== Successfully built LuaJIT 2.0.2 ====

# make install
出现如下内容,表示安装成功
==== Successfully installed LuaJIT 2.0.2 to /usr/local ====

2. 下载准备nginx lua模块
# cd /usr/local/src
# wget https://github.com/chaoslawful/lua-nginx-module/archive/v0.8.6.tar.gz
# tar -xzvf v0.8.6

3. 安装nginx
# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
# tar -xzvf nginx-1.4.2.tar.gz
# cd nginx-1.4.2
//先导入环境变量,告诉nginx去哪里找luajit
# export LUAJIT_LIB=/usr/local/lib
# export LUAJIT_INC=/usr/local/include/luajit-2.0
# ./configure --prefix=/usr/local/nginx-1.4.2 --add-module=../lua-nginx-module-0.8.6
# make -j2
# make install

4.测试安装是否成功

# cd /usr/local/nginx-1.4.2/conf/

# vi nginx.conf

lua指令方式

在server 中添加一个localtion

location /hello {default_type 'text/plain';content_by_lua 'ngx.say("hello, lua")';}

然后启动nginx

# cd /usr/local/nginx-1.4.2/sbin

# ./nginx

浏览器访问:

http://127.0.0.1/hello

显示:hello, lua

注意点:

1.注意每个模块的安装目录不能出现差错

2.如果之前通过apt-get方式安装了nginx,需要先删除nginx,因为此方式下载的软件无法编译

3.

到此说明第三方安装成功,

5.下面开始添加日志

http {log_format  mylog 'response_body:$resp_body';server {        #记录nginx请求返回值
        lua_need_request_body on;set $resp_body "";body_filter_by_lua '
            local resp_body = string.sub(ngx.arg[1], 1, 1000)ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_bodyif ngx.arg[2] thenngx.var.resp_body = ngx.ctx.bufferedend';
      location / {proxy_pass http://127.0.0.1:5000;access_log /var/log/nginx/access.log mylog;}}
}

到此便成功添加response日志。

如果懂Lua语言的,可以对如下代码进行修改,来更加符合自己的要求。

        body_filter_by_lua '
            local resp_body = string.sub(ngx.arg[1], 1, 1000)ngx.ctx.buffered = (ngx.ctx.buffered or "") .. resp_bodyif ngx.arg[2] thenngx.var.resp_body = ngx.ctx.bufferedend';

日志输出时,会发现语言响应结果涉及到字符汉字的时候转为16进制导致无法识别。

部分响应日志如下:

response_body:    {\x22code\x22: 404, \x22message\x22: \x22\xE8\xAF\xB7\xE6\xB1\x82\xE7\x9A\x84\xE8\xB5\x84\xE6\xBA\x90\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\x22, \x22data\x22: {}}

可通过复制到python脚本进行解决。

str1='''
{\x22code\x22: 404, \x22message\x22: \x22\xE8\xAF\xB7\xE6\xB1\x82\xE7\x9A\x84\xE8\xB5\x84\xE6\xBA\x90\xE4\xB8\x8D\xE5\xAD\x98\xE5\x9C\xA8\x22, \x22data\x22: {}}
'''
print(str1.encode('raw_unicode_escape').decode('utf-8'))

输入结果为:

{"code": 404, "message": "请求的资源不存在", "data": {}}

参考网址:

https://www.cnblogs.com/aoeiuv/p/6856056.html

http://www.ttlsa.com/nginx/nginx-modules-ngx_lua/

https://blog.csdn.net/rona_lin/article/details/45028277

转载于:https://www.cnblogs.com/rgcLOVEyaya/p/RGC_LOVE_YAYA_663days.html

nginx日志中添加请求的response日志相关推荐

  1. Spring Boot 2.1之后如何在启动日志中打印请求路径列表

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 翟永超 来源 | http://blog.di ...

  2. Spring Boot 2.x基础教程:找回启动日志中的请求路径列表

    如果您看过之前的Spring Boot 1.x教程,或者自己原本就对Spring Boot有一些经验,或者对Spring MVC很熟悉.那么对于Spring构建的Web应用在启动的时候,都会输出当前应 ...

  3. 怎样在接口地址中添加请求头参数_jmeter5.3做soap接口性能测试配置

    前言 soap的格式在现有的测试中基本很难遇到了,小编也是第一次接触soap接口,在解决问题之前,也是想破脑袋,所以发表出来希望大家能少踩一点坑.首先在操作jmeter之前,我们需要将soap的报文. ...

  4. nginx通过lua从日志中获得请求响应体

    Nginx本身可以通过$request_body变量记录请求内容,但响应内容需要通过Lua模块记录: 步骤: 1 在nginx主配置文件nginx.conf日志格式中增加 $resp_body变量; ...

  5. 如何查看Nginx日志中关于百度爬虫的日志记录

    单独从Nginx日志文件access.log中提取出关于百度爬虫的日志记录并将其存到另一个单独的文件中.可以简单的通过Linux中的管道命令实现,如下所示: cat access.log | grep ...

  6. 链路日志中追踪traceId

    一,使用traceId概述 平时出现问题查询日志是程序员的解决方式,日志一般会从服务器的日志文件,然后查找自己需要的日志,或者日志输出到es中,在es中进行搜索日志,可是对于目前流行的微服务或者单体服 ...

  7. SpringBoot切面AOP打印请求和响应日志

    1.说明 Spring Boot微服务对外开放的Restful接口, 为了方便定位问题, 一般需要记录请求日志和响应日志, 而在每个接口中开发日志代码是非常繁琐的, 本文介绍使用Spring的切面AO ...

  8. 如何在 Windows XP 的事件查看器中查看和管理事件日志

    事件查看器 在 Windows XP 中,事件是在系统或程序中发生的.要求通知用户的任何重要事情,或者是添加到日志中的项.事件日志服务在事件查看器中记录应用程序.安全和系统事件.通过 使用事件查看器中 ...

  9. Centos8 中如何使用journalctl分析日志

    systemd 是大多数主要 Linux 发行版中的默认系统管理器,它带有一个名为"journald"的日志守护程序. systemd从系统.内核和各种服务或守护进程多个来源收集日 ...

最新文章

  1. blender硬表面建模渲染终极教程
  2. 《树莓派Python编程入门与实战(第2版)》——3.9 小结
  3. 《Adobe Acrobat XI经典教程》—第6课转换PPT演示文稿
  4. Asp.net中服务端控件事件是如何触发的(笔记)
  5. Internet Explorer 11:不要再叫我IE
  6. mysql int 长度 范围_mysql int(M) M意义 和int长度
  7. 初级程序员面试经典题目(大串烧 含答案)
  8. ANdroid8.0以上创建快捷方式
  9. 如何申请免费163邮箱?如何申请163邮箱账号?
  10. 流媒体直播点播系统方案设计
  11. 【kafka】Kafka 可视化工具Kafka Eagle安装和使用
  12. Cisco WLC9800 CWA FlexConnect with ISE
  13. 初学者c语言心里测试小项目
  14. 二十六、多线程练习题
  15. Scratch滚动的天空(2)
  16. MyBatis(九):MyBatis类型处理器(TypeHandler)详解
  17. Shell编程(week4_day5)--技术流ken
  18. 如何设计可视化搭建平台的组件商店?
  19. MPLS+BGP产生的数据层面的路由黑洞详解
  20. 【C++】visual Studio 2022 + Opencv4 + Win10 安装以及环境配置

热门文章

  1. 光伏行业春意盎然?一文看懂行业家底和五大趋势
  2. (数字IC)低功耗设计入门(六)——门级电路低功耗设计优化
  3. 数据结构 -- 搜索二叉树
  4. 雅虎对提升网站性能的最佳实践(英文)
  5. POJ 3133 Manhattan Wiring (插头DP)
  6. Android用户界面设计“.NET研究”:框架布局
  7. CSS实现自适应的图片背景边框代码
  8. 27/100. Intersection of Two Linked Lists
  9. cenos 下的一些常用命令及技巧收集篇
  10. 打开php.ini中的Safe_mode,会影响哪些函数?