Fork me on Gitee

Nginx自定义日志文件内容及文件名日期格式

Log文件名输出自定义日期格式

1. 创建自定义配置文件 log_format.conf

创建目录地址:/etc/nginx/userconf/

不要放到nginx的conf.d目录中,nginx.conf配置会引入conf.d目录中所有的配置文件会导致出现变量无效等问题

2. log_format.conf文件

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
    set $year $1;
    set $month $2;
    set $day $3;
}
access_log /var/log/nginx/${server_name}_${server_port}/${server_name}_${server_port}_${year}-${month}-${day}_access.log main;
  1. 在nginx.conf 文件中引入 log_format.conf文件
upstream yapi_host {
    server 192.168.1.222:3000;
}

server {
    listen       80;
    set $vhost $server_name;
    server_name  域名;
    include /etc/nginx/userconf/log_format.conf;
    location / { 
        proxy_pass http://yapi_host;
        index  index.jsp index.htm;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-Port $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

server {
    listen       8001;
    set $vhost $server_name;
    server_name  域名;
    include /etc/nginx/userconf/log_format.conf;
    location / {
        root    /etc/nginx/files;
        autoindex on; 
        autoindex_exact_size off;
        autoindex_localtime on;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
        root   html;
    }
}

自定义Log输出内容

1. nginx.conf文件中修log_format参数

log_format main '$year-$month-$day-$hour:$minutes:$seconds $request_method $request_time $status $request_uri $http_host $upstream_addr $http_referer $http_user_agent $my_cookie';

可以直接使用$http_cookie 来记录所有的cookie信息,但是会导致文件过大且记录一些无用cookie

下边案例使用自定义变量来获取单个cookie信息。

其中$my_cookie为自定义变量,使用main 的server中必须要定义此变量,不然会报错。

获取单个cookie的值可以使用$cookie_{key}方式,比如cookie名字叫longan 则是 $cookie_longan

2. 把log_format.conf文件修改成如下

if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})") {
    set $year $1;
    set $month $2;
    set $day $3;
    set $hour $4;
    set $minutes $5;
    set $seconds $6;
}
set $my_cookie "-";  // 定义默认值 多个server共用此配置文件,使用if判断在不同的server中获取自定义的cookie
if ($server_name = "域名a" && $server_port = '80'){  // 如果是此域名下的情况下 记录名字为longan的cookie值 赋值给$my_cookie
          set $my_cookie longan=$cookie_longan;
}
if ($server_name = "域名b" && $server_port = '8001'){
          set $my_cookie haha=$cookie_longan;
}
…………
access_log /var/log/nginx/${server_name}_${server_port}/${server_name}_${server_port}_${year}-${month}-${day}_access.log main;
posted @ 2021-08-04 19:41  半空清风送十里桃花红  阅读(1180)  评论(0)    收藏  举报