日志格式
我们在记录日志的时候,肯定要告诉Nginx
自己感兴趣的内容,要不然Nginx
也不知道要记录哪些东东。此时我们可以通过log_format
指令来完成这个功能。这个功能和Nginx
的变量机制有很强的关联,我们可以使用Nginx
提供的一些变量。最常用的变量如下:
访问日志
访问日志又叫做access_log
, 它应该记录当前服务器的所有请求,通过access_log
指令来配置,该指令有几个特殊的参数,我们看一下:
access_log path [format [buffer=size]
这里面的path
就是我们的访问日志要保存的路径。format
就是每条日志记录的格式,也就是上面的log_format
定义的格式。buffer
定义了一个缓冲区的大小,只有当内存中的日志体积大于buffer
的时候才会持久化到磁盘,这样可以减少磁盘读写次数,提高效率。
下面是一个配置示例:
access_log "/usr/local/nginx/logs/access_log" main;
错误日志
错误日志通过error_log
来定义,如下:
error_log file [level];
其实error_log
的配置很简单,它的参数也是简单明了的,这里面有一个level
,它表示日志等级。其实几乎所有的软件在记录日志的时候都会有等级这个概念,在不同的场景下使用不同的等级。比如我们在调试软件的时候可能希望尽可能的记录更多的日志,方便我们调试。但是在正式的生产环境,我们可能不会输出特别多的日志以节省磁盘空间,这时候我们会选择一个其他的等级。Nginx
提供了debug
, info
, notice
, warn
, error
, crit
, alert
, emerg
八个等级,它们从左至右等级一次变高。一般线上我们都会选择warn
或者error
等级。比如下面的配置就使用了error
级别:
error_log "/usr/local/nginx/logs/error_log" error;
日志分割
随着服务的运行,我们的日志文件可能变得越来越大,这样对于排查问题非常的不变,这个时候我们可能就需要对日志文件进行切割了。一般情况下,我们会按照小时
对日志进行切割,当然了,如果日志量比较小的话,也可以按照天
进行切割。
我们在最开始介绍Nginx
常用操作的时候提到过,当Nginx
接收到USER1
的时候,会重新打开日志文件,日志切割正式利用了Nginx
的这一个特性。
我们可以通过一个shell
脚本来完成脚本切割功能:
#!/bin/bash
pidPath="/usr/local/nginx/logs/nginx.pid"
oldAccessLog="/usr/local/nginx/logs/access_log"
echo $oldAccessLog "\n"
# 按照小时生成一个新的文件
newAccessLog=$oldAccessLog`date "+%Y%m%d%H"`
echo $newAccessLog "\n"
mv $oldAccessLog $newAccessLog
# 通知nginx重新打开日志文件
kill -USR1 `cat ${pidPath}`
将上面的脚本放到crontab
中,每小时执行一次就可以实现日志分割了。