当前位置: 首页 > news >正文

Nginx修改日志时间格式

以下是基于 yum 安装的 Nginx 修改日志时间格式的完整方案,结合配置方法与常见问题解决:

一、默认时间格式的问题

通过 yum 安装的 Nginx 默认提供两种时间格式变量:

  • $time_local01/Jul/2020:03:25:17 +0800(本地时间)
  • $time_iso86012023-09-12T13:54:22+08:00(ISO8601 格式)

你的问题:

192.168.2.1 - - [09/May/2025:15:28:33 +0800] "GET /mall/hello HTTP/1.1" 200 67 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0" "-"
127.0.0.1 - - [09/May/2025:16:49:21 +0800] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"

想要的结果:

192.168.2.1 - - [2025-05-09 16:53:58] "GET / HTTP/1.1" 200 615 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36 Edg/136.0.0.0" "-"
127.0.0.1 - - [2025-05-09 17:02:16] "GET / HTTP/1.1" 200 615 "-" "curl/7.29.0" "-"

若需自定义为 YYYY-MM-DD HH:mm:ss 格式,需通过变量提取重组实现。

二、全局配置方案(推荐)

通过 map 指令http 块内全局定义时间变量,避免重复修改 server 块:

# /etc/nginx/nginx.conf
http {map $time_iso8601 $log_time {default "";"~^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hour>\d{2}):(?<minutes>\d{2}):(?<date_seconds>\d{2})" "${year}-${month}-${day} ${hour}:${minutes}:${date_seconds}";}log_format main '$log_time|$remote_addr|$request';access_log /var/log/nginx/access.log main;
}

说明

  • 输入变量$time_iso8601,输出变量为 $log_time
  • 正则提取:通过命名捕获组提取年、月、日等字段。
  • 格式重组:将提取的字段拼接为 2023-09-12 13:54:22 格式。

三、分 Server 配置方案(备用)

若需兼容旧版本,可在每个 server 块内添加 if 语句:

server {listen 80;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;}log_format custom '$year-$month-$day $hour:$minutes:$seconds|$remote_addr';access_log /var/log/nginx/custom.log custom;
}

缺点

  • 需在每个 server 块重复添加,维护成本高。
  • if 语句可能引发性能损耗(极端高并发场景)。

四、验证与生效步骤

  1. 检查配置语法
    nginx -t -c /etc/nginx/nginx.conf
  2. 重载配置
    nginx -s reload
  3. 验证日志格式
    tail -n 5 /var/log/nginx/access.log
  4. 预期输出示例:

    2025-05-09 14:30:15|192.168.1.1|GET / HTTP/1.1

http://www.xdnf.cn/news/356923.html

相关文章:

  • WHAT - 用户访问产品个性化延迟问题和技术手段
  • 从投入产出、效率、上手难易度等角度综合对比 pytest 和 unittest 框架
  • 第三节:条件语句与循环:控制程序流程
  • 特殊配合力(SCA)作为全基因组关联分析(GWAS)的表型,其生物学意义和应用价值
  • MQTT:轻量级物联网通信协议详解
  • Vulnhub Lazysysadmin靶机攻击实战(一)
  • logback日志输出到项目运行目录
  • Git_idea界面进行分支合并到主分支详细操作
  • Elasticsearch内存管理与JVM优化:原理剖析与最佳实践
  • 两款Windows小工具,不收费还好用
  • 【网工第6版】第9章 网络管理
  • C语言实现小波变换去噪
  • 虚拟专用服务器(VPS)完全指南:从入门到选型
  • 红色大banner的wordpress免费模板
  • 【各种坐标系】
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.31)
  • AI汽车时代的全面赋能者:德赛西威全栈能力再升级
  • k8s存储类型:emptyDir、hostPath、nfs、pvc及存储类storageclass的静态/动态创建pv
  • 从电动化到智能化,法雷奥“猛攻”中国汽车市场
  • 使用 ECharts GL 实现交互式 3D 饼图:技术解析与实践
  • Python在大数据机器学习模型的多模态融合:深入探索与实践指南
  • C++ - 函数重载
  • python中,什么是协程?
  • SQLite 转换为 MySQL 数据库
  • LlamaIndex 第六篇 SimpleDirectoryReader
  • vue数据可视化开发常用库
  • OpenCV播放摄像头视频
  • LeetCode 热题 100_编辑距离(94_72_中等_C++)(动态规划)
  • Rust 官方文档:人话版翻译指南
  • 高拟人化客服机器人显著提升用户接受度