首页 > 系统相关 >Nginx自定义日志中时间格式

Nginx自定义日志中时间格式

时间:2023-11-18 18:22:43浏览次数:44  
标签:set log 自定义 Nginx time 格式 日志

背景

工作需要对接内部的日志中台,对日志打印有固定的格式要求,为了使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.完整配置示例截图

image

6.日志打印效果

image

标签:set,log,自定义,Nginx,time,格式,日志
From: https://www.cnblogs.com/ailiner/p/17840820.html

相关文章

  • Vue的自定义指令
    在使用自定义指令的标签写入v-'自定义指令名'<template><divclass="box"v-loading="loading"></div></template>exportdefault{data(){return{loading:true}},} 公共配置,写在如main.js的公共js中Vue.di......
  • 使用 Filebeat+Easysearch+Console 打造日志管理平台
    近年来,日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志,挖掘日志数据价值,驱动运维、运营,提升服务管理效率。方案架构Beats是轻量级采集器,包括Filebeat、Metricbeat等。Easysearch是个分布式搜索引擎,提供搜集、分析、存储数据等主要功能。Con......
  • nginx常见问题
    1、400badrequest错误的原因和解决办法配置nginx.conf相关设置如下.client_header_buffer_size16k;large_client_header_buffers464k;根据具体情况调整,一般适当调整值就可以。2、Nginx502BadGateway错误......
  • Nginx+upstream针对后端服务器容错的配置说明
    Nginx+upstream针对后端服务器容错的配置说明  熟练掌握Nginx负载均衡的使用对运维人员来说是极其重要的!下面针对Nignx负载均衡upstream容错机制的使用做一梳理性说明:一、nginx的upstream容错1)nginx判断节点失效状态Nginx默认判断失败节点状态以connectrefuse和timeou......
  • 使用 Filebeat+Easysearch+Console 打造日志管理平台
    近年来,日志管理平台越来越流行。使用日志管理平台可以实时地、统一地、方便地管理和查看日志,挖掘日志数据价值,驱动运维、运营,提升服务管理效率。方案架构Beats是轻量级采集器,包括Filebeat、Metricbeat等。Easysearch是个分布式搜索引擎,提供搜集、分析、存储数据等主要功......
  • nginx的443端口+虚拟主机
    https配置端口:443生成证书文件;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@虚拟主机的配置内容server块虚拟主机:(一)虚拟主机概念虚拟主机指的是一台运行在因特网上的服务器主机分成了多台虚拟的主机,每台虚拟主机是一个独立的站点,虚拟主机可以具有独立的IP,独立的域名,独立的服务端口,......
  • WPF----日志输出组件
    输出日志需要另外下载日志专用的包比如使用Serilog将日志输出到文件需要下载以下几个包SerilogSplat.SerilogSerilog.Sinks.FileSerilog记录日志-雨水的命运-博客园(cnblogs.com)官网:https://serilog.net/ github:https://github.com/serilog ......
  • odoo nginx
    Nginx实例完整Nginx.conf示例参考官方文档即可#odooserverupstreamodoo{server127.0.0.1:8069;}upstreamodoochat{server127.0.0.1:8072;}map$http_upgrade$connection_upgrade{defaultupgrade;''close;}#http->httpsserver{......
  • 统一日志管理方案:Spring项目logback日志与logstash和Elasticsearch整合
    原创/朱季谦 最近在做一个将分布式系统的日志数据通过logstash传到kafka的功能,做完之后决定业余搭一个ELK日志分析系统,将logstash采集到的日志传给Elasticsearch。经过一番捣鼓,也把这个过程给走通了,于是写了这篇总结,可按照以下步骤搭建logstash采集spring日志数据并传输给Elastics......
  • 【小沐学Python】Web服务器搭建(Nginx、IIS)
    1、Web服务器web服务器一词可以代指硬件或软件,或者是它们协同工作的整体。6、NginxNginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,同时也是一个IMAP、POP3、SMTP代理服务器,多用于高连接并发。6.1简介https://nginx.org/en/Nginx是lgorSysoev为俄罗斯......