Nginx——访问日志、错误日志、日志文件切割

访问日志

访问日志主要用于记录客户端访问 nginx的每一个请求,格式可通过 log format指令进行自定义,存储路径、缓存大小等可使用 access log指令设置。通过访问日志的配置,可以记录用户IP、访问时间、请求方式、响应状态、地域来源、跳转来源、使用终端等信息。

1. 查看默认访问配置:
打开Nginx的配置问价nginx.conf,找到log_fromat与access_log指令的默认配置,具体如下:
Nginx——访问日志、错误日志、日志文件切割_第1张图片

上述第1~3行用于设置访问日志的格式,main表示访问日志格式名称,用户可以自定义。其后的字符串表示访问日志格式样式。其中相关的内置变量的含义(如$ remote_addr)参考如下表。

第4行中access_log指令的第1个参数logs/access.log用于指定相对于Nginx的安装目录/usr/local/nginx的日志文件存放路径,并包含日志文件名称,第2个参数表示由log_format指令定义的日志格式名称。

需要注意的是,Nginx默认开启了访问日志的功能,且log_format指令的配置仅可用在http块内,否则会出现警告信息。

为了查看访问日志文件记录的内容,在浏览器端多次访问Nginx默认的网站,如http://localhost,然后切换到日志存放的目录/ usr/local/ nginx/logs/中,打开文件access. log查看,记录内容如图:
在这里插入图片描述

2. 自定义日志格式:

log_format mylog '[ip:] $remote_addr [time:] $time_local [user_agent:] "$http_user_agent"';

上述访问日志格式的名称自定义为mylog,并且修改了默认访问日志的存储格式,在每个需要记录的数据前面都使用“[名称:]”的形式进行标注。

接着,在Nginx的默认server块中采用mylog访问日志格式,使用aacceess_log指令将其访问日志文件保存到指定的目录中,具体如下:

access_log logs/127.0.0.1/access.log mylog buffer=2k flush=5s;

在上述配置中,buffer参数用于设置内存缓存区的大小,flush参数用于设置内容保存在缓存区中的最大时间。在logs目录下手动创建127.0.0.1目录,同时要保证当前Nginx进程的用户和组有对该目录创建access.log文件的权限。否则,日志文件将无法被创建。

完成设置后,平滑重启Nginx,可以看到生成的日志文件,如图:
在这里插入图片描述

注意:若在访问过程中需要记录子请求的日志记录,则可以将log_subrequest指令设置为on,否则默认不记录。

3. 关闭访问日志:

关闭访问日志的实现非常简单,只需要将access_ log 指令的参数设置为off即可。接下来,在上述配置访问日志的server块中添加以下设置,关闭访问日志。

access_log off;

错误日志

错误日志是由error_log指令设置的,主要是用来记录客户端在访问Nginx时出错的记录,且该错误显示格式不支持自定义功能。通过错误日志,可以查看到系统某个服务的性能瓶颈等。有效地利用错误日志,可以得到很多有价值的信息。

1. 默认错误日志配置:

打开Nginx的配置文件nginx.conf,找到error_log指令的默认配置:

error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;

在Nginx给出的以上3种配置方式中:error_ log 指令的第1个参数用于存放错误日志的路径。第2个参数用于指定错误记录详细程度的等级,默认值为error,如第1行配置就是error等级的设置。其他常用的等级还有debug、info、notice、warn、error和crit, 日志记录详细程度依次递减,debug记录的内容最详细,crit记录的内容最简洁。

由于Nginx默认开启了错误日志的功能,下面直接在浏览器中访问一个不存在的文件,打开logs目录下的error. log文件,查看效果如图:
在这里插入图片描述

在实际应用中,error_ log指令除了可以像默认配置- -样在main块中设置,还可以在http、server、location块中设置,配置方式相同。

2. 关闭错误日志:

error_log /dev/null;

上述配置的含义就是,将错误日志信息全部输出到Linux的空设备中,表示丢掉输出信息,也可以将其当做一个“垃圾桶”。

日志文件切割

为了使日志文件的存储更合理、有序,可以通过切割的方式将Nginx中的日志文件按照规定的时间分开存储。其中,切割的方式可分为手动切割和自动切割两种。

1. 手动切割:

所谓手动切割方式就是用户自己执行相关的命令,共分为两步:

  1. 第一步使用mv命令将需要备份的日志移到一个新的目录文件中,通常情况下,备份的文件使用日期命名。
  2. 第二步重新生成一个空的日志文件,以便存储新的记录。具体操作步骤如下。

生成新的日志文件:利用Nginx的reopen功能,完成新日志文件的生成。

nginx -s reopen

2. 自动切割:
手动切割固然实现简单,但若是每天都需要进行相关的操作未免浪费时间,因此可以编写一个shell脚本文件,使用Linux系统提供的crontab指令让其每天按照设定的时间自动备份前一天的日志。

(1)创建脚本文件 autolog.sh

#!/bin/bash
#当前Nginx日志文件存放的目录
logs_path="/usr/local/nginx/logs/127.0.0.1"
#备份日志文件
mv $logs_path/access.log $logs_path/`date +"%Y%m%d%H%M"`.log
#重新打开Nginx日志
/usr/local/nginx/sbin/nginx -s reopen

设置可执行权限:

chmod +x autolog.sh

另外,若要以“年月日”的形式保存前一天的日志,可将第5行代码修改成如下形式。

mv $logs_path/access.log $logs_pash/`date -d yesterday +"%Y%m%d"`.log

(2)系统自动备份

要实现每天定点系统自动备份日志文件,可以使用Linux中提供的crontab命令,设置某脚本被周期性执行的任务。执行下列命令后,进入任务的编辑页面。

crontab -e

上述命令中的-e表示编辑当前用户的定时任务。进人编辑页面后的操作与vi编辑器的操作相同,在实际应用中,通常按照如下形式添加命令,设置系统自动备份时间。

0 0 * * * /usr/local/nginx/logs/127.0.0.1/autolog.sh >/dev/null 2>$1

Nginx——访问日志、错误日志、日志文件切割_第2张图片

值得一提的是,>/dev/null2>&1指令用于屏蔽标准输出和标准出错的信息,并将其放到“垃圾桶”中,目的就是防止在Linux系统中执行crontab操作时,将输出内容和错误信息以邮件的形式发送个用户,造成大量的垃圾文件,因此,在使用crontab指令时,推荐添加>/dev/null 2>&1设置。

你可能感兴趣的:(Nginx,访问日志,错误日志)