Nginx按时间命名日志文件

162 阅读1分钟

概述

本文记录 Nginx 按时间命名日志文件的方式,已经踩过好几次坑,记录一下有备无患。

Nginx配置内容

server{
    ……
        root /data/html/mall;
        index index.html;
        
        if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
            set $year $1;
            set $month $2;
            set $day $3;
            set $hour $4;
        }

        access_log  /data/logs/nginx/$year-$month-$day-$hour-j2.access.log main;
        error_log   /data/logs/nginx/$year-$month-$day-$hour-j2.error.log;
    ……
}

注意

  • Nginx启动用户需要有日志目录中创建文件的权限;
  • access_log 不能加缓存的配置,例如:flush、buffer配置;
  • 每次写入日志都要开启和关闭日志文件,由于常用文件的描述符可以存储在缓存中,因此在open_log_file_cache指令的有效参数指定的时间内,可以继续写入旧文件;
  • 每次写入之前日志之前,都会检查根目录(root指令指定的)是否存在,如果该目录不存在不会创建日志;