원본 코드 수정 을 통 해 nginx 의 날짜 형식 을 변경 합 니 다.
그룹 내 에서 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 모듈 일 뿐 입 니 다.이것 도 경험 하기 어렵 고 순 조 롭 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Docker를 사용한 React 및 .NET Core 6.0 샘플 프로젝트 - 1부이 기사에서는 Entity Framework Core Code First 접근 방식을 사용하는 ASP.NET Core 6.0 WEP API의 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 대해 설명합니다. 웹 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.