Nginx 의 로그 모듈 및 로그 기본 초기 화 및 필터 설정 분석
nginx 에서 ngxerrlog_module 모듈 은 nginx 로그 정 보 를 처리 하 는 데 사 용 됩 니 다. nginx 의 core 모듈 중 하나 입 니 다.
main 함수 에서 시간 초기 화가 끝나 면 바로 로그 모듈 초기 화 입 니 다.
로그 구조: 로그 모듈 의 초기 화 는 주로 전역 변 수 를 초기 화 하 는 것 입 니 다 ngxlog, errlog 파일 만 들 기
ngx_log_s 구조 ngxlog 변 수 는 ngxlog_s 구조 체, 코어 / ngx 에 정의log. h 파일 의 구 조 는 다음 과 같 습 니 다.
// struct ngx_log_s
// {{{
struct ngx_log_s {
ngx_uint_t log_level; //
ngx_open_file_t *file; //
ngx_atomic_uint_t connection; //
ngx_log_handler_pt handler; //
void *data; //
ngx_log_writer_pt writer;
void *wdata;
/*
* we declare "action" as "char *" because the actions are usually
* the static strings and in the "u_char *" case we have to override
* their types all the time
*/
char *action; // ,
ngx_log_t *next; //
}; // }}}
로그 단계 nginx 에서 로 그 는 모두 9 단계 로 나 뉜 다.
#define NGX_LOG_STDERR 0
#define NGX_LOG_EMERG 1
#define NGX_LOG_ALERT 2
#define NGX_LOG_CRIT 3
#define NGX_LOG_ERR 4
#define NGX_LOG_WARN 5
#define NGX_LOG_NOTICE 6
#define NGX_LOG_INFO 7
#define NGX_LOG_DEBUG 8
ngx_open_file_s 구조 에서 로그 의 파일 설명 구 조 는 다음 과 같 습 니 다.
// struct ngx_open_file_s
// {{{
struct ngx_open_file_s {
ngx_fd_t fd;
ngx_str_t name;
void (*flush)(ngx_open_file_t *file, ngx_log_t *log);
//
void *data; //
}; // }}}
모든 파일 과 관련 된 데이터 구조 와 작업 은 core / ngx 에 있 습 니 다.conf_file. h 와 core / ngxconf_file. c 파일 중
로그 초기 화 프로 세 스 로그 와 관련 된 초기 화 작업 은 모두 core / ngx 에 있 습 니 다.log. c 파일 에서 현재 우리 가 호출 하 는 것 은 초기 화 함수 입 니 다.
// ngx_log_t *ngx_log_init(u_char *prefix);
// ngx_log , errlog {{{
ngx_log_t *
ngx_log_init(u_char *prefix)
{
u_char *p, *name;
size_t nlen, plen;
ngx_log.file = &ngx_log_file;
ngx_log.log_level = NGX_LOG_NOTICE;
name = (u_char *) NGX_ERROR_LOG_PATH;
/*
* we use ngx_strlen() here since BCC warns about
* condition is always false and unreachable code
*/
nlen = ngx_strlen(name);
if (nlen == 0) {
ngx_log_file.fd = ngx_stderr;
return &ngx_log;
}
p = NULL;
//
#if (NGX_WIN32)
if (name[1] != ':') {
#else
if (name[0] != '/') {
#endif
if (prefix) {
plen = ngx_strlen(prefix);
} else {
#ifdef NGX_PREFIX
prefix = (u_char *) NGX_PREFIX;
plen = ngx_strlen(prefix);
#else
plen = 0;
#endif
}
if (plen) {
name = malloc(plen + nlen + 2);
if (name == NULL) {
return NULL;
}
p = ngx_cpymem(name, prefix, plen);
if (!ngx_path_separator(*(p - 1))) {
*p++ = '/';
}
ngx_cpystrn(p, (u_char *) NGX_ERROR_LOG_PATH, nlen + 1);
p = name;
}
}
ngx_log_file.fd = ngx_open_file(name, NGX_FILE_APPEND,
NGX_FILE_CREATE_OR_OPEN,
NGX_FILE_DEFAULT_ACCESS);
if (ngx_log_file.fd == NGX_INVALID_FILE) {
ngx_log_stderr(ngx_errno,
"[alert] could not open error log file: "
ngx_open_file_n " \"%s\" failed", name);
#if (NGX_WIN32)
ngx_event_log(ngx_errno,
"could not open error log file: "
ngx_open_file_n " \"%s\" failed", name);
#endif
ngx_log_file.fd = ngx_stderr;
}
if (p) {
ngx_free(p);
}
return &ngx_log;
}
// }}}
이 초기 화 과정 은 이해 하기 쉽 습 니 다. 그 후에 다른 로그 작업 도 이 파일 에 있 습 니 다. 우 리 는 만난 후에 상세 하 게 설명 하 겠 습 니 다.
함수 실행 후, ngx 로 돌아 가기log 구조의 주소
ngx_log 구조 추출 값 은 다음 과 같 습 니 다.
{
log_level = 6,
file = 0x80e3000 ,
connection = 0,
handler = 0x0,
data = 0x0,
writer = 0x0,
wdata = 0x0,
action = 0x0,
next = 0x0
}
file 필드 추출 값:
{
fd = 3,
name = {
len = 0,
data = 0x0
},
flush = 0x0,
data = 0x0
}
사용 ngxlog_if 특정 로 그 를 기록 하지 않 는 첫 번 째 단계: Github 에서 ngx 다운로드log_주소https://github.com/cfsego/ngx_log_if / 두 번 째 단계: Nginx 에 제3자 모듈 을 설치 합 니 다.제3자 모듈 의 설 치 는 참고 할 수 있다.http://wiki.nginx.org/3rdPartyModules 사용 -- add - module 압축 해제 후의 ngx 추가log_다음 과 같다 면
./configure --add-module=/var/local/ngx_log_if-master
그리고 Nginx 를 컴 파일 해서 설치 하면 됩 니 다.STEP 3: access 설정log_bypass_if nginx. conf 설정 파일 에
server {
location / {
access_log_bypass_if ($status = 404); # 404
access_log_bypass_if ($uri ~* 'images'); # uri images
access_log_bypass_if ($uri = '/index.html'); # uri /index.html
access_log_bypass_if ($host ~* 'tonv.cc'); # host tonv.cc
}
}
Nginx 를 다시 시작 하면 특정한 로 그 를 표시 하지 않 고 걸 러 낼 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.