首页 > 网站 > Nginx > 正文

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

2024-08-30 12:23:52
字体:
来源:转载
供稿:网友
  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系统中,内核是根据文件描述符来找文件的。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表