nginx日志及定时对nginx进行日志分割

一、nginx日志

nginx分为两种:一种是访问日志(access log),一种是错误日志(error log)

1、访问日志 access log
(1)使用访问日志

用法:access_log 日志存放路径 日志格式名称

使用范围(上下文):在http、server、location

如:

  1. access_log logs/shixinke.com-access.log main;

日志格式可以自定义,但需要使用一些nginx是的一些变量,并自己组合格式:

(2)定义日志格式:

log_format 格式名称 格式内容;

如:

  1. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  2. '$status $body_bytes_sent "$http_referer" '
  3. '"$http_user_agent" "$http_x_forwarded_for"';

日志中这些变量的含义:

  • $remote_addr 访问者的IP
  • $remote_user 访问者的用户信息(一般是没有的)
  • $time_local 访问时间(服务器的时间)
  • $request 访问的页面
  • $status 服务器返回的HTTP状态码
  • $body_bytes_sent 响应主体的大小(如页面的大小)
  • $http_referer请求的来源
  • $http_user_agent 访问 者的user agent信息(主要是浏览器信息)
  • $http_x_forworded_for 请求的原始IP
(3)关闭日志
  1. access_log off;
2、错误日志 error log
(1)开启错误日志

error_log 日志路径 错误级别;

  1. error_log logs/shixinke.com.error.log info;

错误日志的错误级别(debug,info,notice,warn,error,crit,级别依次降低,级别越高,信息越全面)

(2)关闭错误日志(设置成off,会将错误日志记录到off文件中)

  1. error_log /dev/null;

二、nginx日志分割(定时对nginx进行分割)

原理:定时将设置的配置文件的内容复制新文件中(新文件也是定时生成的),然后将原配置文件的内容清空。

实现步骤:

1、编写脚本:(需要用到shell编程)

脚本位置:/var/www/html/sh/split_nginx_log.sh;

  1. #!/bin/bash
  2. #description: split nginx log
  3. #author : shixinke
  4. LOGPATH=/usr/local/nginx/logs/shixinke.access.log #访问日志的路径
  5. BACKUPPATH='/var/www/html/shixinke.com/data/logs/'$(date -d yesterday %Y%m) #新日志文件所在目录 (每个月一个目录)
  6. BACKUPFILE=$BACKUPPATH$(date -d %Y%m%d).access.log
  7. mkdir $BACKUPPATH
  8. test -x $0 || echo 'File does not have permission to be executed'
  9. mv $LOGPATH $BACKUPFILE
  10. touch $LOGPATH
  11. exit 0;
2、给脚本添加执行的权限
  1. chmod a+x split_nginx_log.sh
3、将脚本加入到定时任务中:

按crontab -e 输入定时脚本:

  1. 0 0 */1 * * * sh /var/www/html/sh/split_nginx_log.sh >> /var/www/html/logs/crontab.log

注:定时任务时间格式:

分钟 小时 天 月 年 周