nginx-配置-日志配置

    科技2022-08-20  117

    1·日志分类

    nginx日志分为access.log(访问日志)和error.log(错误日志)

    2·access.log日志

    2.1 默认配置

    默认的nginx的日志配置如下:     log_format  combined  '$remote_addr - $remote_user [$time_local] "$request" '                       '$status $body_bytes_sent "$http_referer" '                       '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  logs/access.log  combined;

    2.2 参数log_format

    一般都是写在http下面,server里面直接引用就可以

    格式:log_format combined-name "..."

    下面是默认的,也是无需设置的combined日志格式,access_log参数中如果不指定,则默认就是这个:

    log_format  combined  '$remote_addr - $remote_user [$time_local] "$request" '                       '$status $body_bytes_sent "$http_referer" '                       '"$http_user_agent" "$http_x_forwarded_for"';

    下面是常用的日志变量,可以由它们灵活搭配组成自定义的日志格式

    注意:log_format指定设置的name名称在nginx配置文件中是不能重复的

    $remote_addr, $http_x_forwarded_for 记录客户端IP地址 $remote_user 记录客户端用户名称 $request 记录请求的URL和HTTP协议(GET,POST,DEL,等) $status 记录请求状态 $body_bytes_sent 发送给客户端的字节数,不包括响应头的大小; 该变量与Apache模块mod_log_config里的“%B”参数兼容。 $bytes_sent 发送给客户端的总字节数。 $connection 连接的序列号。 $connection_requests 当前通过一个连接获得的请求数量。 $msec 日志写入时间。单位为秒,精度是毫秒。 $pipe 如果请求是通过HTTP流水线(pipelined)发送,pipe值为“p”,否则为“.”。 $http_referer 记录从哪个页面链接访问过来的 $http_user_agent 记录客户端浏览器相关信息 $request_length 请求的长度(包括请求行,请求头和请求正文)。 $request_time 请求处理时间,单位为秒,精度毫秒; 从读入客户端的第一个字节开始,直到把最后一个字符发送给客户端后进行日志写入为止。 $time_iso8601 ISO8601标准格式下的本地时间。 $time_local 通用日志格式下的本地时间。

    2.3 参数access_log

    可以写在http, server, location, if in location, limit_except中

    格式:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

       path是日志文件存放的路径

       format是前面用log_format指定设置的日志格式的名称

       buffer是设置内存缓冲区的大小

    举例

    【1】常见的:

    access_log logs/access.log  main buffer=32k;

    【2】不记录日志:

     access_log off;

    【3】使用默认格式:

    access_log logs/access.log;或者access_log logs/access.log combined;

    【4】日志文件路径可以包含变量(0.7.4版本之后支持) 如分割日志的时候就很有用,例如下面按照天分割日志记录

            if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})") {             set $year $1;             set $month $2;             set $day $3;         }

            access_log  /usr/local/nginx/logs/host.access-$year-$month-$day.log  main;

    或者access_log如果是配置在server下面,可以在将日志记录在以这个server名字命名的日志文件中

            access_log logs/$server_name.log combined;   ($server_name是变量,代表当前server的名字)

    但是如果日志文件路径中包含变量,会存在以下限制:

    【限制1】nginx配置的用户要对日志目录有创建文件的权限,不然无法生成日志文件。

    【限制2】缓冲将不会被使用

    【限制3】性能需要参数进行优化

    对于每一条日志记录,日志文件都将先打开文件,再写入日志记录,然后马上关闭。为了提高包含变量的日志文件存放路径的性能,须要使用open_log_file_cache指令设置经常使用的日志文件描述符缓存

    open_log_file_cache指令主要用来设置含有变量的日志路径的文件描述符缓存,参考下面的介绍

    2.4 参数open_log_file_cache

    语法

       open_log_file_cache max=N [inactive=time][min_uses=N][valid=time];

       默认是禁止的,也就是open_log_file_cache off;

    参数说明

    【max】:设置缓存中的最大文件描述符的数量,如果超过设置的最大文件描述符数量,则蚕蛹LRU算法清楚“较不常使用的文件描述符”

    【inactive】:设置一个时间,如果再设置的时间内每日有使用此文件描述符,则自动删除此描述符,测参数为可选参数,默认的时间为10秒钟

    【min_uses】:在参数inactive指定的时间范围内,如果日志文件超过被使用的次数,则将该日志文件的描述符计入缓存。默认次数为1

    【valid】:设置多长时间检查一次,看一看变量指定的日志文件路径与文件名是否依然存在。默认时间为60秒

    举例

    open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;

     

    3·error.log日志

    格式:error_log 日志文件路径 错误日志级别

    默认:#error_log  logs/error.log  error;

    Nginx 支持 将不 同 虚拟 主机 的 日志 存储 在 不同 的 位置, 这是 个 很有 特色 的 功能。

    日志 中 默认 的 错误 级别:

    ·  main 部分: error

    ·  HTTP 部分: crit

    ·  server 部分: crit

     

    3.1 记录指定url的错误日志

    如下将/static/ 相关的错误日志都单独记录了

    server { error_log /var/logs/nginx/example.com.error.log; location /static/ { error_log /var/logs/nginx/static-error.log debug; } }

    3.2 打印rewrite报错信息

    rewrite_log on; 开启后,它将发送所有的 rewrite 相关的日志信息到 error_log 文件中,使用 [notice] 级别。随后就可以在error_log 查看rewrite信息了。

    server { error_log /var/logs/nginx/example.com.error.log; rewrite_log on; }

     

    4·其他日志辅助指令

    4.1·log_ not_ found 指令

    启用 或 禁用 404 错误 日志, 这个 指令 可以 用来 禁止 Nginx 记录 找 不到 robots. txt 和 favicon. ico 这类 文件 的 错误 信息。

    语法: log_ not_ found on| off

    默认值: on

    使用 环境: debug_ points stop;

    示例:

            location = /favicon. ico {              log_ not_ found off;         }         

    Processed: 0.008, SQL: 9