add context to a resolver log

This commit is contained in:
Igor Sysoev 2010-01-11 11:01:02 +00:00
parent 571ebe28d6
commit 089b2fd31e
2 changed files with 42 additions and 14 deletions

View File

@ -87,6 +87,7 @@ static void *ngx_resolver_calloc(ngx_resolver_t *r, size_t size);
static void ngx_resolver_free(ngx_resolver_t *r, void *p); static void ngx_resolver_free(ngx_resolver_t *r, void *p);
static void ngx_resolver_free_locked(ngx_resolver_t *r, void *p); static void ngx_resolver_free_locked(ngx_resolver_t *r, void *p);
static void *ngx_resolver_dup(ngx_resolver_t *r, void *src, size_t size); static void *ngx_resolver_dup(ngx_resolver_t *r, void *src, size_t size);
static u_char *ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len);
ngx_resolver_t * ngx_resolver_t *
@ -150,7 +151,11 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_addr_t *addr)
uc->sockaddr = addr->sockaddr; uc->sockaddr = addr->sockaddr;
uc->socklen = addr->socklen; uc->socklen = addr->socklen;
uc->server = addr->name; uc->server = addr->name;
uc->log = &cf->cycle->new_log;
uc->log = cf->cycle->new_log;
uc->log.handler = ngx_resolver_log_error;
uc->log.data = uc;
uc->log.action = "resolving";
} }
return r; return r;
@ -840,7 +845,7 @@ ngx_resolver_send_query(ngx_resolver_t *r, ngx_resolver_node_t *rn)
} }
if ((size_t) n != (size_t) rn->qlen) { if ((size_t) n != (size_t) rn->qlen) {
ngx_log_error(NGX_LOG_CRIT, uc->log, 0, "send() incomplete"); ngx_log_error(NGX_LOG_CRIT, &uc->log, 0, "send() incomplete");
return NGX_ERROR; return NGX_ERROR;
} }
@ -2071,6 +2076,29 @@ ngx_resolver_strerror(ngx_int_t err)
} }
static u_char *
ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len)
{
u_char *p;
ngx_udp_connection_t *uc;
p = buf;
if (log->action) {
p = ngx_snprintf(buf, len, " while %s", log->action);
len -= p - buf;
}
uc = log->data;
if (uc) {
p = ngx_snprintf(p, len, ", resolver: %V", &uc->server);
}
return p;
}
ngx_int_t ngx_int_t
ngx_udp_connect(ngx_udp_connection_t *uc) ngx_udp_connect(ngx_udp_connection_t *uc)
{ {
@ -2082,19 +2110,19 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
s = ngx_socket(AF_INET, SOCK_DGRAM, 0); s = ngx_socket(AF_INET, SOCK_DGRAM, 0);
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, uc->log, 0, "UDP socket %d", s); ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &uc->log, 0, "UDP socket %d", s);
if (s == -1) { if (s == -1) {
ngx_log_error(NGX_LOG_ALERT, uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno,
ngx_socket_n " failed"); ngx_socket_n " failed");
return NGX_ERROR; return NGX_ERROR;
} }
c = ngx_get_connection(s, uc->log); c = ngx_get_connection(s, &uc->log);
if (c == NULL) { if (c == NULL) {
if (ngx_close_socket(s) == -1) { if (ngx_close_socket(s) == -1) {
ngx_log_error(NGX_LOG_ALERT, uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno,
ngx_close_socket_n "failed"); ngx_close_socket_n "failed");
} }
@ -2102,13 +2130,13 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
} }
if (ngx_nonblocking(s) == -1) { if (ngx_nonblocking(s) == -1) {
ngx_log_error(NGX_LOG_ALERT, uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno,
ngx_nonblocking_n " failed"); ngx_nonblocking_n " failed");
ngx_free_connection(c); ngx_free_connection(c);
if (ngx_close_socket(s) == -1) { if (ngx_close_socket(s) == -1) {
ngx_log_error(NGX_LOG_ALERT, uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno,
ngx_close_socket_n " failed"); ngx_close_socket_n " failed");
} }
@ -2118,8 +2146,8 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
rev = c->read; rev = c->read;
wev = c->write; wev = c->write;
rev->log = uc->log; rev->log = &uc->log;
wev->log = uc->log; wev->log = &uc->log;
uc->connection = c; uc->connection = c;
@ -2136,7 +2164,7 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
#endif #endif
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, uc->log, 0, ngx_log_debug3(NGX_LOG_DEBUG_EVENT, &uc->log, 0,
"connect to %V, fd:%d #%d", &uc->server, s, c->number); "connect to %V, fd:%d #%d", &uc->server, s, c->number);
rc = connect(s, uc->sockaddr, uc->socklen); rc = connect(s, uc->sockaddr, uc->socklen);
@ -2144,8 +2172,8 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
/* TODO: aio, iocp */ /* TODO: aio, iocp */
if (rc == -1) { if (rc == -1) {
ngx_log_error(NGX_LOG_CRIT, uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_CRIT, &uc->log, ngx_socket_errno,
"connect() to %V failed", &uc->server); "connect() failed");
return NGX_ERROR; return NGX_ERROR;
} }

View File

@ -37,7 +37,7 @@ typedef struct {
struct sockaddr *sockaddr; struct sockaddr *sockaddr;
socklen_t socklen; socklen_t socklen;
ngx_str_t server; ngx_str_t server;
ngx_log_t *log; ngx_log_t log;
} ngx_udp_connection_t; } ngx_udp_connection_t;