当前位置 主页 > 服务器问题 > nginx问题汇总 >

    nginx可以自动创建log文件吗?

    栏目:nginx问题汇总 时间:2019-10-31 10:42

      nginx自动切割访问日志
      Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。
      一条典型的Web访问日志如下:
      112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo A326 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/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="LAST WEEK" +"%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系统中,内核是根据文件描述符来找文件的。