nginx日志如何打印转发请求报文某些字段内容

你在后盾学习,那里视频非常多,视频都是一线讲师亲自录制的,含金量高,不管是转行还是小白,在那里都可以解决

nginx能自动创建log文件吗

nginx自动切割访问日志

Web访问日志(access_log)记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。

一条典型的Web访问日志如下:

112.97.37.90--[14/Sep/2013:14:37:39+0800]"GET/HTTP/1.1"3015"-""Mozilla/5.0(Linux;U;Android2.3.6;zh-cn;LenovoA326Build/GRK39F)AppleWebKit/533.1(KHTML,likeGecko)Version/4.0MobileSafari/533.1MicroMessenger/4.5.1.259"-

1、要解决问题:

当网站访问量大后,日志数据就会很多,如果全部写到一个日志文件中去,文件会变得越来越大。文件大速度就会慢下来,比如一个文件几百兆。写入日志的时候,会影响操作速度。另外,如果我想看看访问日志,一个几百兆的文件,下载下来打开也很慢。使用第三方免费的日志分析工具-日志宝,可以上传nginx、apache、iis的日志文件,它们帮助分析网站安全方面。毕竟专攻,更加专业。日志宝对上传的文件也是做了大小限制的,不超过50m。

2、nignx没有自动分开文件存储日志的机制。由于nginx它不会帮你自动分文件保存。所以,需要自己编写脚本来实现。

shell脚本文件nginx_log_division.sh内容如下:

#/bin/bash

logs_path="/data/wwwlogs/"

#以前的日志文件。

log_name="xxx.log"

pid_path="/usr/local/nginx/logs/nginx.pid"

mv${logs_path}${log_name}${logs_path}${log_name}_$(date--date="LASTWEEK"+"%Y-%m-d").log

kill-USR1`cat${pid_path}`

上面shell脚本的原理是:先把以前的日志文件移动重命名成一个,目的是就是备份。

按照上个周一的本日来命名,运行脚本的时候时间点是”2013-09-16”,那么生成文件名称是”xxx.log_20130909.log”。

在没有执行kill-USR1`cat${pid_path}`之前,即便已经对文件执行了mv命令而改变了文件名称,nginx还是会向新命名的文件”xxx.log_20130909”照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。

----------------对linux文件描述符的理解

文件描述符是linux内核为每个打开的文件命名的一个整数标识。

linux内核为每一个进程生成(或者说维护)一个”文件描述符表”,这个文件描述符表记录的是“此进程所打开的文件(进行标识)”。

在这里的环境中,nginx就是一个运行中的进程,这个进程早就打开了一个日志文件,在文件描述符表是记录了文件的。

即便日志文件的路径改变了,但是还是能够找到(根据文件描述符表可以定位)。

----------------------------------------------

当执行命令“kill-USR1`cat${pid_path}`”的时候,nginx.pid文件中保存的其实就是一个数字(自己可以打开看一下,我这里是894),nginx将其主进程的pid(进程号)写入到了nginx.pid文件中,所以可以通过cat命令直接拿到其主进程号,直接操作指定的进程号。

kill-USR1`cat${pid_path}`就等同于

kill–USR1894#指定发信号(USR1)信号给这个进程编号。

在linux系统中,linux是通过信号与”正在运行的进程”进行通信的。linux系统中,也很多预定义好的信号,像SIGHUP。USR1是用户自定义信号。可以理解为:进程自己定义接到这个信号该干嘛(也就是进程编写者自己确定收到这个信号干嘛还是什么都不做都行,完全交给开发人员自己决定)。而在nginx中,它自己编写了代码处理当我接到USR1信号的时候,让nginx重新打开日志文件。具体原理如下:

1、nginx的主进程收到USR1信号,会重新打开日志文件(以nginx配置文件中的日志名称命名,就是配置文件中access_log项所设置的值,如果文件不存在,会自动创建一个新的文件xxx.log)。

2、然后把日志文件的拥有者改为“工作进程(worker进程)”,目的是让worker进程就具备了对日志文件的读写权限(master和worker通常以不同用户运行,所以需要改变拥有者)。

3、nginx主进程会关闭重名的日志文件(也就是刚才使用mv命令重命名成xxx.log_20130909.log的文件),并通知工作进程使用新打开的日志文件(刚才主进程打开的文件xxx.log)。具体实现上更细化点就是,主进程把USR1信号发给worker,worker接到这个信号后,会重新打开日志文件(也就是配置文件中约定的xxx.log)

===================================定时执行脚本

nginxlocation打印自定义日志相关推荐

  1. android studio 魅族真机 flyme6 下logcat 打印自定义日志

    1.拨号界面输入:*#*#3646633#*#*进入工程模式下 2.选择Log and Debugging模块. 3.选择Debug Utils 4.调试等级改为Engineer Mode 注意:一定 ...

  2. jboss7 关闭日志打印_使用自定义日志记录处理程序在JBoss AS 7中跟踪SQL语句

    jboss7 关闭日志打印 使用ORM从您的特定数据库中提取数据并让其创建和发布您必须亲自编写的所有SQL语句似乎很方便. 这就是使ORM解决方案受欢迎的原因. 但是它也有一个缺点:由于ORM为您做了 ...

  3. Shell自定义日志打印格式

    Shell自定义日志打印格式 本文是基于CentOS 7.3系统环境,自定义Shell日志打印格式: CentOS 7.3 自定义日志格式 新建一个shell文件a.sh #!/bin/bashfun ...

  4. 【微信小程序】自定义日志打印

    开发过程中日志打印都是必不可少的一个环节,特别是前端调试时,往往通过打印日志的方式来定位可能出现的问题.然而,选择了日志打印,必然也就给自己带来了后续清除日志打印语句的烦恼. 微信小程序提供了cons ...

  5. java自定义日志级别_自定义log4j日志级别

    因为项目中需要输出一些特别的日志来做数据统计.如果开启log4j提供的INFO日志级别,每天生成的日志文件就会变得越来越大.这样就得写个定 时任务来删除这个文件.为了只输出所需的日志级别,唯有自己定义 ...

  6. Dubbo自定义日志拦截器

    前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...

  7. 实现打印异常日志_老生常谈SpringAop日志收集与处理做的工具包

    场景 : 使用Spring Aop拦截参数日志目前大部分做法都基本上大同小异,不想日后每个项目工程都写一份这样的Aop拦截处理日志的代码,甚至代码侵入. 我想知道一些相对重要的请求方法的请求参数,响应 ...

  8. springMVC,aop管理log4j,把当前session信息和错误信息打印到日志

    ((((其实还是不太理解aop的正真意义但是这样可以实现想要的了,我的感觉是执行一个方法时首先通过filter( 这个fiter可以不配置,之所以要他是因为在aop切入的方法session消失了,我们 ...

  9. 自定义日志_Dubbo自定义日志拦截器源码分析

    需求场景 在使用Dubbo搭建的分布式项目中,服务层代码调用是这样的: @GetMapping(value = "/info")2 public BaseResult userIn ...

  10. Dubbo自定义日志拦截器 1

    前言 上一篇文章 Spring aop+自定义注解统一记录用户行为日志 记录了 web层中通过自定义注解配合Spring aop自动记录用户行为日志的过程.那么按照分布式架构中Dubbo服务层的调用过 ...

最新文章

  1. ubantu14下vim的配置...
  2. 笔记1-3: 从标准输入读取命令并执行
  3. 小米一键上锁工具_小米首款高端全自动智能锁火热预售中,一触开启全自动时代...
  4. LINQ:进阶 - LINQ 标准查询操作概述
  5. c语言命名规则_C语言的基本数据类型及变量
  6. form表单提交,后台实体类接收转义问题 解决方案
  7. Upload-Labs(17-20)
  8. 【github系列】github上传文件时忽略部分文件类型
  9. 计算机系统基本组成教学设计,《计算机系统的基本组成》教学设计.pdf
  10. python杂记-6(timedatetime模块)
  11. java实现生成pdf_详解Java生成PDF文档方法
  12. html5中秋节吃月饼游戏源码,html5中秋吃月饼大赛微信游戏源码
  13. 3d打印计算机设计打孔操作,干货:3D打印,建模时你需要注意这10个技巧
  14. 阿里粗排模型-cold
  15. DES加密解密-CryptoJS与Java
  16. 宝塔面板FTP存储空间无法连接的问题
  17. 老鹰教小鹰飞翔的故事
  18. Tampermonkey安装与简单编写自定义脚本,以及实用脚本分享
  19. 2017关于自学PHP的方法
  20. 1564_AURIX_TC275_电压监控寄存器整理

热门文章

  1. redis搭建哨兵模式(哨兵模式原理)
  2. usb gadget 端点halt的产生
  3. 配置路由器console接口密码和vty接口密码
  4. 专访李智慧:架构是最高层次的规划和难以改变的决定
  5. Vue打包优化篇-CDN加速
  6. 蒙特卡洛_蒙特卡洛辍学
  7. 童年辣条神话卫龙,首日破发“辣条第一股”,跌超10亿
  8. 1- mongoDB安装及基础
  9. Python学习—字典
  10. Android手机截图怎么做,手机截屏怎么弄,详细教您手机截图方法