第十四节——日志

阅读:465 2019-03-19 15:01:26 来源:新网

nginx将遇到的不同严重级别的错误信息记录到错误日志。error_log指令设置记录错误信息到指定文件、stderr或syslog和最小严重级别。默认,错误日志位于logs/error.log(绝对路径取决于操作系统和安装方式),所有严重级别的消息都会被记录。

下面配置,将错误消息的最小严重级别从error改为warn:

error_loglogs/error.logwarn;

在这种情况下,warn、error、crit、alert和emerg级别的消息被记录。

错误日志默认全局范围开启。在main(顶级)配置上下文中定义error_log指令覆盖该行为。main上下文的设置总是被其它配置级别继承。error_log指令也可以在http、stream、server和location级别指定,覆盖从更高级别继承的设置。在一个错误的情况下,只记录一条最接近错误发生级别的错误消息到错误日志。然而,如果相同级别指定多个error_log指令,消息写入错误指定的日志。

nginx在请求处理之后记录客户端请求的访问日志。默认访问日志位于logs/access.log,信息以预定义组合格式写入日志。为了覆盖默认设置,使用log_format指令改变日志消息的格式,同样,access_log指令可以指定日志的位置和格式。日志的格式使用变量定义。

下面例子定义日志格式,使用表示响应的gzip压缩率的值扩展预定义组合格式。格式应用到启用压缩的虚拟服务器。

http{log_formatcompression'$remote_addr-$remote_user[$time_local]''"$request"$status$body_bytes_sent''"$http_referer""$http_user_agent""$gzip_ratio"';server{gzipon;access_log/spool/logs/nginx-access.logcompression;#...}}

日志格式的另一个例子是跟踪nginx和上游服务器的时间,有助于调试问题。可以使用以下变量记录时间值:

所有时间值以秒加毫秒为单位。

http{log_formatupstream_time'$remote_addr-$remote_user[$time_local]''"$request"$status$body_bytes_sent''"$http_referer""$http_user_agent"''rt=$request_timeuct="$upstream_connect_time"uht="$upstream_header_time"urt="$upstream_response_time"';server{access_log/spool/logs/nginx-access.logupstream_time;#...}}

这里读取产生的时间值有一定规则:

通过启用日志消息缓存和频繁使用文件名包含变量的日志文件的描述符缓存可以优化记录日志。在access_log指令上指定buffer参数启用缓存并设置缓存大小。日志先记录到缓存,当缓存内存不足或其它原因,日志从缓存刷入日志文件。

使用open_log_file_cache指令启用日志文件描述符缓存。

类似error_log指令,定义在特定配置级别的access_log指令覆盖前面级别的设置。当请求处理完成时,消息被写入配置在当前级别或继承前面级别的日志。如果同一级别定义多个访问日志,消息写入所有访问日志。

条件日志允许从访问日志排除繁琐或不重要的日志条目。在nginx中,在access_log指令使用if参数启用条件日志。

该例子排除http状态码为2xx(成功)和3xx(重定向)的请求:

map$status$loggable{~^[23]0;default1;}access_log/path/to/access.logcombinedif=$loggable;4记录syslog

syslog工具标准的计算机消息日志,允许在一个系统日志服务器从不同设备收集日志消息。在nginx中,在error_log和access_log指令中使用syslog:前缀配置记录syslog。

syslog消息可以发送到server=,可以是一个域名、一个ip地址或一个unix域socket路径。域名或ip地址可以使用特定端口覆盖默认514端口。unix域socket路径可以使用unix:前缀指定:

error_logserver=unix:/var/log/nginx.sockdebug;access_logsyslog:server=[2001:db8::1]:1234,facility=local7,tag=nginx,severity=info;

例子中,nginx将debug日志级别的错误日志消息写入unix域socket,访问日志写入ipv6地址和1234端口的syslog服务器。

facility=参数指定记录消息的程序类型。默认值为local7。其它可选值为:auth、authpriv、daemon、cron、ftp、lpr、kern、mail、news、syslog、user、uucp、local0、...、local7。

tag=参数应用自定义标记给系统日志(我们的例子中是nginx)。

相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服