修改nginx源代码改变访问日志的时间格式

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

 由于公司领导说要把nginx访问日志存进数据库,然后利用程序进行分析,但是nginx访问日志的时间格式是:[17/Jun/2013:14:42:13 +0400] 这种格式不能用datetime格式存进数据库,只能以字符串的格式存进数据库,但是以字符串的格式存进数据库不好按天来进程查询分析,所以需要更改nginx访问日志的时间格式,经过网上查找资料得知更改源代码可以再进行编译可以更改nginx访问日志的格式,但是公司里的程序员都是PHP的,没有人懂C语言,想来想去只有我自己改源码然后编译安装(虽然我也不懂C)。

我需要更改的格式:

原格式为: 17/Jun/2013:14:42:13 +0400

需要修改成:2013-06-17 22:39:02

nginx版本是:nginx-1.4.1

经过网上查找资料,发现需要更改两个文件:src/http/modules/ngx_http_log_module.c 和src/core/ngx_times.c 这两个文件。
一、修改src/core/ngx_times.c 文件,这个文件有3个地方需要修改,分别是:
1、在49行和50行原代码如下:
1
2
static  u_char            cached_http_log_time[NGX_TIME_SLOTS]
                               [ sizeof ( "28/Sep/1970:12:00:00 +0600" )];
修改后:
1
2
static  u_char            cached_http_log_time[NGX_TIME_SLOTS]
                                     [ sizeof ( "1970-09-28 12:00:00" )];
2、在64行的原代码为:
1
ngx_cached_http_log_time.len =  sizeof ( "28/Sep/1970:12:00:00 +0600" ) - 1;
修改后:
1
ngx_cached_http_log_time.len =  sizeof ( "1970-09-28 12:00:00" ) - 1;
3、在151行到158行的原代码是(很重要的修改):
1
2
3
4
5
6
7
p2 = &cached_http_log_time[slot][0];
( void ) ngx_sprintf(p2,  "%02d/%s/%d:%02d:%02d:%02d %c%02d%02d" ,
                    tm .ngx_tm_mday, months[ tm .ngx_tm_mon - 1],
                    tm .ngx_tm_year,  tm .ngx_tm_hour,
                    tm .ngx_tm_min,  tm .ngx_tm_sec,
                    tp->gmtoff < 0 ?  '-'  '+' ,
                    ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60));
修改后是:
1
2
3
4
5
6
7
p2 = &cached_http_log_time[slot][0];
( void ) ngx_sprintf(p2,  "%4d-%02d-%02d %02d:%02d:%02d" ,
                    tm .ngx_tm_year,  tm .ngx_tm_mon,
                    tm .ngx_tm_mday,  tm .ngx_tm_hour,
                    tm .ngx_tm_min,  tm .ngx_tm_sec,
                    tp->gmtoff < 0 ?  '-'  '+' ,
                    ngx_abs(tp->gmtoff / 60), ngx_abs(tp->gmtoff % 60));
注:这里其实是把P2格式改成P1格式基本相同了,完全可以直接将log_time的格式改成p1。

二、修改src/http/modules/ngx_http_log_module.c 文件,有一个地方需要修改

在220行:

1
{ ngx_string( "time_local" ),  sizeof ( "28/Sep/1970:12:00:00 +0600" ) - 1

修改后:

1
{ ngx_string( "time_local" ),  sizeof ( "1970-09-28 12:00:00" ) - 1

修改好后,重新编译nginx,编译安装完后用killall -9 nginx 干掉nginx在启动,然后查看nginx的访问日志,看看时间格式是不是改好了。

1
2
3
[root@localhost objs]# tail -n 0 -f /usr/local/nginx/logs/access.log
10.10.8.120 - - [2013-06-18 03:24:24] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31"
10.10.8.120 - - [2013-06-18 03:24:24] "GET /favicon.ico HTTP/1.1" 404 570 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.43 Safari/537.31"

看到上面的时间格式和我想要的是一样的,说明修改成功。



本文转自1594cqb 51CTO博客,原文链接:http://blog.51cto.com/wolfchen/1223803,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
11天前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
1月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
3月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
2月前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
146 2
|
3月前
|
应用服务中间件 nginx
nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
【8月更文挑战第27天】nginx error日志 client intended to send too large body: 1434541 bytes 如何处理?
271 6
|
3月前
|
JavaScript 应用服务中间件 PHP
nginx server 禁止特定目录下的某类文件访问
【8月更文挑战第26天】这段Nginx配置代码旨在保护`/uploads/`目录下的文件,禁止执行任何`.php`, `.html`, `.htm`, 或 `.js`等潜在有害文件,即便被访问也无法运行。取而代之的是重定向到首页。为了实现这一设置,用户需要定位到对应子域名的`.conf`配置文件中进行相应修改。若网站支持多个访问域名,则需确保在正确的`.conf`文件中实施此配置。
93 1
|
3月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
3月前
|
存储 监控 应用服务中间件
查看nginx日志文件
器性能和提高网站可用性。掌握日志文件的路径、查看方法和基本分析技能对于任何服务器管理员来说都是必备技能。
128 1
|
3月前
|
存储 Ubuntu 应用服务中间件
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转
33 4
|
3月前
|
应用服务中间件 Linux nginx
Nginx log 日志文件较大,按日期生成 实现日志的切割
Nginx log 日志文件较大,按日期生成 实现日志的切割
663 0