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

由于公司领导说要把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行原代码如下:

static u_char            cached_http_log_time[NGX_TIME_SLOTS]
                              [sizeof("28/Sep/1970:12:00:00 +0600")];

修改后:

static u_char            cached_http_log_time[NGX_TIME_SLOTS]
                                    [sizeof("1970-09-28 12:00:00")];

2、在64行的原代码为:

ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1;

修改后:

1ngx_cached_http_log_time.len = sizeof("1970-09-28 12:00:00") - 1;

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Servers/web/

3、在151行到158行的原代码是(很重要的修改):

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));

修改后是:

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的访问日志,看看时间格式是不是改好了。

[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"

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

本博文有部分内容参考网上的一些文章,如有版权问题,请联系本人。更多博文请移步:linux开源技术博客 或者 平凡的日子

本文出自 “平凡的日子” 博客,请务必保留此出处http://wolfchen.blog.51cto.com/2211749/1223803

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索日志
, 文件
, nginx
, sizeof
, 格式
, 时间
, u_char
, nginx访问日志
编译进nginx
nginx 访问日志、nginx 查看访问日志、nginx访问日志分析、nginx 访问日志配置、nginx访问日志格式,以便于您获取更多的相关知识。

时间: 2024-10-04 01:04:09

如何修改nginx源代码改变访问日志的时间格式的相关文章

nginx自动切割访问日志

  Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息. 一条典型的Web访问日志如下: 112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenov

怎么修改nginx的access.log的时间格式

说明 nginx访问日志的时间格式,原格式为: 03/Jun/2017:02:06:53 +0800 这种日志格式,对于我们来说,不是我们习惯的日志格式.使用起来不方便. 我们打算修改为 2017-06-03 07:06:53 我们有两种方法可以达到要求 修改nginx源代码 参考:http://wolfchen.blog.51cto.com/2211749/1223803 利用lua的方式 我们的原则是不修改nginx源代码的,以便平滑升级nginx,所以我们选择第二种方法,具体如下: lua

Linux定时切割Nginx访问日志并删除指定天数前的日志记录

说明: 操作系统:CentOS 站点1:bbs .111cn.net 站点2:sns .111cn.net Nginx安装路径:/usr/local/nginx Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf 站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.111cn.net.conf 站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.111cn.net.conf 目的: 1.对站点1

nginx访问日志并删除指定天数前的日志记录配置方法_nginx

说明: 操作系统:CentOS 站点1:bbs.jb51.net 站点2:sns.jb51.net Nginx安装路径:/usr/local/nginx Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf 站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.jb51.net.conf 站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.jb51.net.conf 目的: 1.对站点1和站点2的n

10分钟精通Nginx访问日志分析统计

简介 很多个人站长在搭建网站时使用nginx作为服务器,为了了解网站的访问情况,一般有两种手段: 使用CNZZ之类的方式,在前端页面插入js,用户访问的时候触发js,记录访问请求. 利用流计算.或离线统计分析nginx的access log,从日志中挖掘有用信息. 两种方式各有优缺点: CNZZ使用起来比较简单,各种指标定义清楚.但这种方式只能记录页面的访问请求,像ajax之类的请求是无法记录的,还有爬虫信息也不会记录. 利用流计算.离线计算引擎可以支持个性化需求,但需要搭建一套环境,并且在实时

Nginx学习之自定义访问日志

写在开始 日志的重要性不言而喻,一般来说我们开发过程中会为每个项目定义自己的日志格式以及存储路径. 就我们普通的JAVAWEB项目来说,重要的日志一般输出并存放在Tomcat的log目录下,并区分日志输出级别.用于区分,查阅并统计相关日志信息. 当然,这不是重点,重点是很多公司,对于日志的重要性似乎并不是那么重视,当然这可能跟平台本身有一定的关系. 日志配置 其实分析Nginx日志,可以得到很多有用的数据,响应耗时的url.请求时间,各个时间段的请求量,并发量.配合使用ELK日志系统可以很好的呈

nginx修改端口后,访问项目报错404

上一篇文章,说了,修改nginx端口的事情,就是,默认配置的80端口被占用,修改为其他端口. 然后就遇到其他的问题了,修改端口后,访问项目找不到了. 其实很简单,nginx中端口修改,访问的项目,也要顺便写上修改后的端口. 否则,端口不一样,肯定访问不到项目啊,笨!!!!!!!!

android源代码改变修改日期

问题描述 android源代码改变修改日期 请教各位大神,下载的android源代码,怎么改变修改日期?因为要答辩,怕老师知道是下载的,妹子在此谢谢了 解决方案 文件不多的话,可以调整自己的电脑日期和时间,打开一个文件,加个空格,然后保存即可.注意调整后的日期和时间的真实性. 解决方案二: android源代码?你指的是安卓系统源代码?还是按照应用源代码? 解决方案三: 这篇文章解释的很清楚 你可以参考一下http://www.glmei.cn/?p=1783 解决方案四: 写个小程序,遍历所有

《ELK Stack权威指南(第2版)》一3.1 Nginx访问日志

第3章 场 景 示 例 前面虽然介绍了几十个Logstash插件的常见配置项,但是过多的选择下,如何组合使用这些插件,依然是一部分用户的难题.本章将列举一些最常见的日志场景,演示针对性的组件搭配,希望能给读者带来启发. 本章介绍的场景包括:Nginx访问日志.Nginx错误日志.Postfix日志.Ossec日志.Windows系统日志.Java日志.MySQL慢查询日志.Docker容器日志. 3.1 Nginx访问日志 访问日志处理分析绝对是使用ELK stack时最常见的需求.默认的处理方