该模块用于定义nginx日志模式
官方示例:
log_format compression '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log compression buffer=32k;
使用log_format定义日志格式:
Syntax: log_format name [escape=default|json|none] string ...;
Default: log_format combined "...";
Context: http
格式中常用变量:
remote_addr:记录客户端ip
remote_user:记录和客户端用户名
time_local:记录通用本地时间
time_lso8601:符合ISO8601标准的通用本地时间
request:记录请求的方法和协议
status:记录请求状态码
body_bytes_sent:发送给客户端的资源字节数,不包括请求头
bytes_sent:发送给客户端的总字节数
msec:日志写入时间,单位是秒,精确是毫秒
http_referer:记录从哪个链接页面访问过来的
http_user_agant:记录客户端浏览器相关信息
http_x_forwarderd_for:记录客户端真实IP地址
request_length:请求的长度
request_time:请求花费的时间
nginx变量记录在http://nginx.org/en/docs/varindex.html中,如果有更多的需求可以到这里查找。
语法:日志可以定义在http、server、location等层,一般放在server层就可以
Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http,server,location,if in location,limit_except
log_format apm '$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
server {
listen 80;
server_name gzip.yyang.com;
root /data/gzip;
access_log /data/gzip_accrss.log apm;
location / {
index index.html index.htm;
}
... ...
192.168.10.1 - - [27/Jul/2022:20:48:07 +0800] "GET /log.txt HTTP/1.1" 200 7737 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" "42.95"
此为访问一次网站的访问记录。
location /favicon.ico {
access_log off;
expires 365d;
}
一般error日志,配置的日志界别越低,产生的日志内容就越丰富,占用的存储空间也就越大,同时频繁的磁盘i/o与网络i/o也会影响nginx性能。
测试环境可以设置到debug级别;业务刚上线可以是info级别,稳定可以更新为warn级别。
nginx错误日志一般有一下几个级别:
debug、info、notice、warn、error、crit、alert、emerg
配置示例:默认配置
error_log /var/log/nginx/error_log warn;
关闭错误日志
error_log /dev/null;
以access日志来说,每一万个访问日志大概占用1MB的磁盘,那么当有大量的请求的时候就会占用很大的空间,处理起来也会不方便。
我们可以用linux的日志文本管理工具:logrotate管理nginx日志。
我们可以在/etc/logrotate.d目录下看一下默认的nginx管理方式
[root@centos7 logrotate.d]# cat nginx
/var/log/nginx/*.log { #日志路径
daily #处理周期
missingok
rotate 52 #回滚周期
compress #配置文件压缩
delaycompress
notifempty
create 640 nginx adm
sharedscripts
postrotate #文件切割执行脚本
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
以上内容是每天会对nginx日志进行一次归档,然后进行压缩后保存。周期为52天,从第53天开始就会覆盖第一天的日志,确保本地日志不会无限增长。
里面的参数可以根据自己需求修改。

大概就是以上截图这个样式。
另外nginx的日志格式可以写成json格式,方便作用于ELK日志平台,就不再这说了,大概写法为:
log_format log_json ‘{
' “remote_addr": "$remote_addr", '
' "referer": "$http_referer", '
}’;
定义多少变量就写多少!