원본 코드 수정 을 통 해 nginx 의 날짜 형식 을 변경 합 니 다.

3687 단어 cnginxhttplinux
머리말
    그룹 내 에서 nginx 0.7 버 전 을 1.2+버 전 으로 전환 하려 는 친구 가 있 습 니 다.0.7 버 전에 서 원본 코드 를 바 꾸 어 로그 출력 시간 형식 을[08/Mar/2013:09:30:58+0800]에서 2013-03-08 12:21:03 으로 바 꾸 었 습 니 다.1.2+버 전 을 수정 할 때 형식 이 어 지 러 워 졌 다 고 합 니 다.형식 이 계속 틀 렸 습 니 다.마침 누군가가@저 를 도와 달라 고 했 습 니 다.
반드시 알 아야 한다
    nginx log 로그 형식 이 라면 src/core/nginxtimes.c 와 src/http/modules/ngxhttp_log_module.c 이 두 파일 에서 수정 합 니 다.
    ngix.conf 의 기본 로그 형식의 시간 형식 은$time 을 사용 합 니 다.local 에서 지정 합 니 다.이것 은 acces.log 에 설 치 된 시간 형식 입 니 다.[08/Mar/2013:09:30:58+0800]입 니 다.
날짜 형식 변경
    현재 최신 안정 판  nginx-1.2.7 ,nginx 열기http_log_module.c 에서 time 찾기local
    { ngx_string("time_local"), sizeof("28/Sep/1970:12:00:00 +0600") - 1,
                          ngx_http_log_time },
    { ngx_string("time_iso8601"), sizeof("1970-09-28T12:00:00+06:00") - 1,
     1.2.7     time_iso8601   ,         ,
      1:
    { ngx_string("time_iso8601"), sizeof("1970-09-28T12:00:00+06:00") - 1,
    =》
    { ngx_string("time_iso8601"), sizeof("1970-09-28 12:00:00") - 1,

    nginx.conf 설정 변경:
     log_format  main  '$remote_addr - $remote_user $time_iso8601 "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';

    번역 을 재 편집 한 후에 시작 합 니 다.curl"localhost"는 브러시 log 를 보 는 것 이 잘못 되 었 습 니 다.
    2.ngx 열기times.c 찾기 iso8601
    첫 번 째 부분 보기:
    static u_char            cached_http_log_iso8601[NGX_TIME_SLOTS]
                                    [sizeof("1970-09-28T12:00:00+06:00")];
      2:
    [sizeof("1970-09-28T12:00:00+06:00")];
    =》
    [sizeof("1970-09-28 12:00:00")];

    두 번 째 부분 보기:
    ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1;
      2:
    ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1;
    =》
    ngx_cached_http_log_iso8601.len = sizeof("1970-09-28 12:00:00") - 1; 

    
    세 번 째 부분 보기:
    p3 = &cached_http_log_iso8601[slot][0];

    (void) ngx_sprintf(p3, "%4d-%02d-%02dT%02d:%02d:%02d%c%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));

    변경 3:
   (void) ngx_sprintf(p3, "%4d-%02d-%02dT%02d:%02d:%02d%c%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));
    =》
    (void) ngx_sprintf(p3, "%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);

    ok,재 컴 파일,시작,curl"localhost",acees.log 를 보면 볼 수 있 습 니 다.
    127.0.0.1 - - 2013-03-08 12:21:03 "GET / HTTP/1.1" 200 612 
총결산
    일반적으로 nginx 소스 코드 를 바 꾸 지 않 고 기본적으로 개발 하 는 것 도 nginx 의 http 모듈 일 뿐 입 니 다.이것 도 경험 하기 어렵 고 순 조 롭 습 니 다.

좋은 웹페이지 즐겨찾기