Nginx自定义日志中时间格式的操作方法
作者:成王败寇~
工作需要对接内部的日志中台,对日志打印有固定的格式要求,为了使Nginx的access日志也能被采集,需要对日志格式进行自定义,这篇文章主要介绍了Nginx自定义日志中时间格式,需要的朋友可以参考下
背景
工作需要对接内部的日志中台,对日志打印有固定的格式要求,为了使Nginx的access日志也能被采集,需要对日志格式进行自定义,要求日志格式为:
yyyy-MM-dd HH:mm:ss.SSS LOG_LEVEL LOG_MSG ---> 时间格式+打印级别+业务日志
如:
23-11-18 17:34:23.738 DEBUG monitor-7 org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug:137: xxxxx
但目前我们Nginx按照默认格式配置,大致如下:
192.23.4.5 -- [18/Nov/2023L18:58:52 +0800] "GET /api/cluster HTTP/1.1" 200 155 "https://xxx.xx.xx.x"
时间格式无法不符合要求,并且未区分日志级别,因此,需要对日志打印格式进行自定义
自定义日志格式配置
1.重新定义日志格式
# 原日志格式 log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "http_referer" "$http_user_agent" "$http_x_forwarded_for"; # 修改后日志格式 log_format main '$time_zh_ms $log_level - $remote_addr - $remote_user "$request" $status $body_bytes_sent "http_referer" "$http_user_agent" "$http_x_forwarded_for"; # 对比修改前后差异,其实就是 1.自定义了$time_zh_ms,在下面的配置中,将其设置为yyyy-MM-dd HH:mm:ss.SSS格式 2.自定义了$log_level,为日志打印级别,下面的配置中,将按照请求响应码来判断为何种日志打印级别 以上只是为了满足日志采集需要,其他字段可按实际情况变动
2.定义时间格式的转换
Nginx默认支持的时间格式为iso8601,此处我们需要通过获取到内置时间变量$time_iso8601和$msec,具体配置如下:
# 将iso8601格式时间转换为yyyy-MM-dd HH:mm:ss格式 # 按照正则将时间字符串分割为6部分,分别为年月日时分秒,再拼接到$time_zh自定义变量中 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 $time_zh "$1-$2-$3 $4:$5:$6"; } # 获取毫秒时间戳,并拼接到$time_zh之后 if ($msec ~ "(\d+)\.(\d+)") { set $time_zh_ms $time_zh.$2 } # 注意:$time_zh_ms其实就是在log_format中定义的日志格式第一个字段
3.根据响应码定义日志级别
Nginx的access日志默认是没有日志级别这一说法的,此处可视为我们为了适配业务而做的规则,在我们的使用场景中,将返回码为4或5的请求,视为错误,打印为ERROR级别,其他请求为INFO级别
# 如果http返回码为4或5开头,则设置log_level为ERROR,否则为INFO map $status $log_level { ~^[45] ERROR; default INFO; } # 此处$status为Nginx内置变量,代表请求的响应码,log_level为自定义变量
4.设置日志使用具体格式并打印到文件
access_log /dev/stdout main; access_log /etc/nginx/logs/access.log main; error_log /dev/stdout; error_log /etc/nginx/logs/error.log;
5.完整配置示例截图
6.日志打印效果
到此这篇关于Nginx自定义日志中时间格式的文章就介绍到这了,更多相关nginx自定义日志内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!