程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 修改nginx源代碼改變訪問日志的時間格式

修改nginx源代碼改變訪問日志的時間格式

編輯:關於C語言

   由於公司領導說要把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;
修改後:
ngx_cached_http_log_time.len = sizeof("1970-09-28 12:00:00") - 1;
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行:

{ ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved