众所周知,线上如果出现事故我们通常都是查看日志去进行问题定位并且进行修复。使用好Nginx日志有利于我们线上进行修复异常问题。在Nginx中日志主要分为两种:access_log(访问日志)和error_log(错误日志)。通过查看access_log我们可以查看用户ip,浏览器信息及请求时间等信息,通过查看error_log我们可以查看线上出错的具体信息,可以帮助我们定位异常的原因。本篇文章主要带领大家详细了解Nginx如何配置日志。本文将会涉及到的日志配置指令:
access_log指令
首先,我们可以先看看access_log指令。access_log命令可以配置访问日志。我们可以先看下access_log指令的语法结构:
我们先来看看语法结构中的参数的含义:
access_log指令可以使用于http根节点,虚拟服务器server节点,上下文配置location以及limit_except中。无法在其他作用域使用access_log指令,否则Nginx会报错。我们可以看一个简单的配置access_log的小例子:
这个配置指定日志存储路径为/root/.pm2/logs/niyueling.log,日志使用默认格式combined。日志缓存大小为32k,日志写入前会进行gzip压缩,缓存有效期为5分钟。
log_format指令
刚才有讲过如果未指定日志格式,Nginx会使用combined日志格式为默认格式。combined日志格式默认使用格式为:
但是如果不想使用combined日志格式,就可以使用log_format指令来自定义格式内容。log_format指令需要在http节点下进行配置。我们先来看下log_format指令的语法结构:
我们先来看看log_format的参数对应的用法:
下面贴一下log_format指令中常用的一些变量:
我们可以接着看个自定义日志格式的小案例:
open_log_file_cache指令
对于网站的访问记录,通常操作都是首先打开日志文件,然后写入日志记录,最后关闭文件。默认情况下日志文件不进行缓存的,我们可以通过open_log_file_cache指令设置日志文件缓存。open_log_file_cache指令可以配置在http根节点,虚拟服务器server节点以及上下文location中。我们先看下open_log_file_cache指令的语法结构:
首先先贴下参数对应的含义:
可以看一个简单配置日志缓存的小例子:
log_not_found指令
这个命令用于指定是否在error_log错误日志中记录不存在的错误,如文件不存在等。默认值为是。我们可以先看下语法结构:
log_not_found指令可以配置在http根节点,虚拟服务器server节点以及上下文location中。设置为on表示记录不存在的错误,设置为off表示不记录不存在的错误。
log_subrequest指令
log_subrequest指令用于指定在access_log访问日志中是否记录子请求的访问记录。默认情况为不记录,贴下语法结构:
log_subrequest指令可以配置在http根节点,虚拟服务器server节点以及上下文location中。设置为on表示记录子请求访问记录,设置为off表示不记录子请求访问记录。
rewrite_log指令
rewrite_log指令由ngx_http_rewrite_module模块提供服务,用来记录日志重写。可以在error_log错误日志中记录notice级别的重写日志。默认是不启用状态,贴下语法结构:
rewrite_log指令可以配置在http根节点,虚拟服务器server节点以及上下文location以及if条件判断中。设置为on表示在错误日志中记录notice级别的重写日志,设置为off表示在错误日志中不记录notice级别的重写日志。
error_log指令
error_log指令顾名思义,就是用来指定错误日志的,一般来说线上出现bug都是通过error_log日志来定位问题所在而加以解决的。error_log指令可以记录服务器和请求处理过程中的错误信息。我们先看下error_log指令的语法结构:
参数含义其实很容易可以理解:
error_log指令可以配置在http节点,main节点,虚拟服务器server节点以及上下文location中。
日志切割
Nginx记录日志默认情况下是访问日志全部写入access_log中,错误日志全部写入error_log中。这样会导致日志文件原来越大,不利于查看日志分析问题异常,所以我们可以将日志以日期为单位进行切割。首先需要写一个脚本实现Nginx按天切割:
然后给脚本添加可执行权限,最后添加Linux定时任务:
通过上面的讲解差不多可以知道Nginx对于日志是如何进行配置的,实际上就是通过log_format配置日志格式,如果log_format中使用了Nginx变量,则可以通过open_log_file_cache指令来设置缓存提高性能。然后通过access_log进行设置访问日志,通过error_log指令设置错误日志。最后实现定时任务定时切割每天的日志,有利于我们后期维护。
如果喜欢我的文章,欢迎关注个人公众号:程序猿周先森。
点击留言
领取专属 10元无门槛券
私享最新 技术干货