nginx 디 버 깅 로그 의 몇 가지 방법
11430 단어 nginx
가장 쉬 운 방법 은
fprintf(stderr, "haoning hahahah:%s\r
","ningning");
혹은
ngx_log_stderr(0,"haoning: ngx_http_hello_world_handler\"%s\"","haohao" );
근 데 인쇄 하면
ngx_log_stderr(0,"haoning haohao subrequest in memory: %d", (int) r->subrequest_in_memory);
ngx_log_stderr(0,"haoning haohao r->method : %d",(int) r->method);
ngx_log_stderr(0,"haoning haohao r->http_version: %d",(int) r->http_version) ;
ngx_log_stderr(0,"haoning haohao r->request_line.data: %s",r->request_line.data) ;
ngx_log_stderr(0,"haoning haohao r->uri.data): %s",r->uri.data);
ngx_log_stderr(0,"haoning haohao r->args.data: %s",r->args.data);
ngx_log_stderr(0,"haoning haohao r->unparsed_uri.data: %s",r->unparsed_uri.data);
ngx_log_stderr(0,"haoning haohao r->method_name.data: %s",r->method_name.data) ;
ngx_log_stderr(0,"haoning haohao r->http_protocol.data: %s",r->http_protocol.data);
ngx_log_stderr(0,"haoning haohao r->exten.data: %s",r->exten.data);
잘못 을 보고 하 다
이춘
http://wiki.nginx.org/HttpEchoModule
원본 코드 에 ddebug. h 에서 정의 한 인쇄 log 가 stderr 로 출력 되 었 습 니 다.
그래서 이 모듈 의 소스 코드 에서 시작 하 는
#ifndef DDEBUG
#define DDEBUG 0
#endif
... 로 바꾸다
#ifndef DDEBUG
#define DDEBUG 1
#endif
nginx 를 시작 할 때 log 를 출력 합 니 다. 유사 합 니 다.
e.c line 463.
echo *** ngx_http_echo_helper: filter used = 1 at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 324.
echo *** ngx_http_echo_helper: found raw arg hello at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 358.
echo *** ngx_http_echo_echo_before_body: processing echo_before_body directive... at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 463.
echo *** ngx_http_echo_helper: found raw arg world at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 358.
echo *** ngx_http_echo_helper: filter used = 1 at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 324.
echo *** ngx_http_echo_helper: found raw arg hiya at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 358.
echo *** ngx_http_echo_helper: found raw arg igor at /root/hellogit/hello/graphviz/nginx/mymodule/echo-nginx-module-0.48/src/ngx_http_echo_module.c line 358.
방향 을 바 꿀 수 있다
./nginx >a.log 2>&1
★ ★ ★ ★ ★ 두 번 째 방법 ★ ★ ★ ★ ★ ★ ★
또 하 나 는 일반적인 인쇄 로그 방법 으로 nginx 와 관계 가 없습니다.
모든 것 이 적 용 됩 니 다. haolog. c 를 정의 합 니 다. haolog. h 는 ngxhttp_echo_module. c 에서 haolog. h 참조
/root/hellogit/hello/graphviz/nginx/mymodule/echo
[root@VM_253_237_tlinux echo]# ls
config haolog.c haolog.h nginx.conf ngx_http_echo_module.c shuoming.txt
[root@VM_253_237_tlinux echo]#
config 에 새로 추 가 된 소스 코드. c 와 의존 하 는. h 를 표시 합 니 다.
ngx_addon_name=ngx_http_echo_module
HTTP_MODULES="$HTTP_MODULES ngx_http_echo_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_echo_module.c $ngx_addon_dir/haolog.c"
NGX_ADDON_DEPS="$NGX_ADDON_DEPS $ngx_addon_dir/haolog.h"
CORE_LIBS="$CORE_LIBS -lpcre"
로그 코드 는 다음 과 같 습 니 다.
[root@VM_253_237_tlinux echo]# cat haolog.h
#include
#include
#define DEBUG_LOG( str ) log_append_to_file("/root/hellogit/hello/graphviz/nginx/mymodule/mylog/test.log", str,__FILE__,__LINE__ );
void log_append_to_file(char* filename,char* str,char* sourceFile,int fileLine);
[root@VM_253_237_tlinux echo]
haolog.c:
[root@VM_253_237_tlinux echo]# cat haolog.c
#include
#include
#define DEBUG_LOG( str ) log_append_to_file("/root/hellogit/hello/graphviz/nginx/mymodule/mylog/test.log", str,__FILE__,__LINE__ );
void log_append_to_file(char* filename,char* str,char* sourceFile,int fileLine)
{
time_t t;
time(&t);
struct tm* tp= localtime(&t);
char now_str[100];
strftime(now_str, 100, "%Y-%m-%d %H:%M:%S", tp);
FILE *fo;
fo = fopen(filename, "a");
if (fo == 0) {
return;
}
fprintf(fo, "%s %s(:%d):%s\r
",now_str,sourceFile,fileLine, str);
fclose(fo);
}
//int main(int argc, char **argv)
//{
///*********************define******************/
//
// DEBUG_LOG("haoning----logmain.c");
// printf("Hello World!
");
// return 0;
//}
[root@VM_253_237_tlinux echo]#
완전한 nginx 모듈 은 다음 과 같 습 니 다.
[root@VM_253_237_tlinux echo]# cat ngx_http_echo_module.c
/*
* Copyright (C) fabricehao
*/
#include
#include
#include
#include
#include "haolog.h"
/* Module config */
typedef struct {
ngx_str_t ed;
} ngx_http_echo_loc_conf_t;
static char *ngx_http_echo(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
static void *ngx_http_echo_create_loc_conf(ngx_conf_t *cf);
static char *ngx_http_echo_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child);
/* Directives */
static ngx_command_t ngx_http_echo_commands[] = {
{
ngx_string("echo"),
NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
ngx_http_echo,
NGX_HTTP_LOC_CONF_OFFSET,
offsetof(ngx_http_echo_loc_conf_t, ed),
NULL
},
ngx_null_command
};
/* Http context of the module */
static ngx_http_module_t ngx_http_echo_module_ctx = {
NULL, /* preconfiguration */
NULL, /* postconfiguration */
NULL, /* create main configuration */
NULL, /* init main configuration */
NULL, /* create server configuration */
NULL, /* merge server configuration */
ngx_http_echo_create_loc_conf, /* create location configration */
ngx_http_echo_merge_loc_conf /* merge location configration */
};
/* Module */
ngx_module_t ngx_http_echo_module = {
NGX_MODULE_V1,
&ngx_http_echo_module_ctx, /* module context */
ngx_http_echo_commands, /* module directives */
NGX_HTTP_MODULE, /* module type */
NULL, /* init master */
NULL, /* init module */
NULL, /* init process */
NULL, /* init thread */
NULL, /* exit thread */
NULL, /* exit process */
NULL, /* exit master */
NGX_MODULE_V1_PADDING
};
/* Handler function */
static ngx_int_t
ngx_http_echo_handler(ngx_http_request_t *r)
{
DEBUG_LOG("haoning.........ngx_http_echo_handler");
ngx_int_t rc;
ngx_buf_t *b;
ngx_chain_t out;
ngx_http_echo_loc_conf_t *elcf;
elcf = ngx_http_get_module_loc_conf(r, ngx_http_echo_module);
if(!(r->method & (NGX_HTTP_HEAD|NGX_HTTP_GET|NGX_HTTP_POST)))
{
return NGX_HTTP_NOT_ALLOWED;
}
r->headers_out.content_type.len = sizeof("text/html") - 1;
r->headers_out.content_type.data = (u_char *) "text/html";
r->headers_out.status = NGX_HTTP_OK;
r->headers_out.content_length_n = elcf->ed.len;
if(r->method == NGX_HTTP_HEAD)
{
DEBUG_LOG("haoning......ngx_http_echo_handlerr---r->method == NGX_HTTP_HEAD");
rc = ngx_http_send_header(r);
if(rc != NGX_OK)
{
return rc;
}
}
b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
if(b == NULL)
{
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Failed to allocate response buffer.");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
out.buf = b;
out.next = NULL;
b->pos = elcf->ed.data;
b->last = elcf->ed.data + (elcf->ed.len);
b->memory = 1;
b->last_buf = 1;
rc = ngx_http_send_header(r);
if(rc != NGX_OK)
{
return rc;
}
DEBUG_LOG("haoning......ngx_http_output_filter");
return ngx_http_output_filter(r, &out);
}
static char *
ngx_http_echo(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
{
DEBUG_LOG("haoning --ngx_http_echo->>>>> init");
ngx_http_core_loc_conf_t *clcf;
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
clcf->handler = ngx_http_echo_handler;
ngx_conf_set_str_slot(cf,cmd,conf);
return NGX_CONF_OK;
}
static void *
ngx_http_echo_create_loc_conf(ngx_conf_t *cf)
{
DEBUG_LOG("haoning --ngx_http_echo_create_loc_conf");
ngx_http_echo_loc_conf_t *conf;
conf = ngx_pcalloc(cf->pool, sizeof(ngx_http_echo_loc_conf_t));
if (conf == NULL) {
return NGX_CONF_ERROR;
}
conf->ed.len = 0;
conf->ed.data = NULL;
return conf;
}
static char *
ngx_http_echo_merge_loc_conf(ngx_conf_t *cf, void *parent, void *child)
{
DEBUG_LOG("haoning --ngx_http_echo_merge_loc_conf");
ngx_http_echo_loc_conf_t *prev = parent;
ngx_http_echo_loc_conf_t *conf = child;
ngx_conf_merge_str_value(conf->ed, prev->ed, "");
return NGX_CONF_OK;
}
[root@VM_253_237_tlinux echo]#
호출
DEBUG_LOG("haoning --ngx_http_echo_merge_loc_conf");
사용자 정의 로 인쇄 하기
/root/hellogit/hello/graphviz/nginx/mymodule/mylog/test.log
질문, handler 에 있 는 것 이 왜 인쇄 되 지 않 습 니까???
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.