comparison src/core/ngx_syslog.c @ 9056:29adacffdefa

Syslog: removed usage of ngx_cycle->log and ngx_cycle->hostname. During initial startup the ngx_cycle->hostname is not available, and previously this resulted in incorrect logging. Instead, hostname from the configuration being parsed is now preserved in the syslog peer structure and then used during logging. Similarly, ngx_cycle->log might not match the configuration where the syslog peer is defined if the configuration is not yet fully applied, and previously this resulted in unexpected logging of syslog errors and debug information. Instead, cf->cycle->new_log is now referenced in the syslog peer structure and used for logging, similarly to how it is done in other modules.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 10 Mar 2023 07:43:40 +0300
parents 7f9935f07fe9
children 8771d35d55d0
comparison
equal deleted inserted replaced
9055:9db24374123b 9056:29adacffdefa
63 } 63 }
64 64
65 if (peer->tag.data == NULL) { 65 if (peer->tag.data == NULL) {
66 ngx_str_set(&peer->tag, "nginx"); 66 ngx_str_set(&peer->tag, "nginx");
67 } 67 }
68
69 peer->hostname = &cf->cycle->hostname;
70 peer->log = &cf->cycle->new_log;
68 71
69 peer->conn.fd = (ngx_socket_t) -1; 72 peer->conn.fd = (ngx_socket_t) -1;
70 73
71 peer->conn.read = &ngx_syslog_dummy_event; 74 peer->conn.read = &ngx_syslog_dummy_event;
72 peer->conn.write = &ngx_syslog_dummy_event; 75 peer->conn.write = &ngx_syslog_dummy_event;
241 return ngx_sprintf(buf, "<%ui>%V %V: ", pri, &ngx_cached_syslog_time, 244 return ngx_sprintf(buf, "<%ui>%V %V: ", pri, &ngx_cached_syslog_time,
242 &peer->tag); 245 &peer->tag);
243 } 246 }
244 247
245 return ngx_sprintf(buf, "<%ui>%V %V %V: ", pri, &ngx_cached_syslog_time, 248 return ngx_sprintf(buf, "<%ui>%V %V %V: ", pri, &ngx_cached_syslog_time,
246 &ngx_cycle->hostname, &peer->tag); 249 peer->hostname, &peer->tag);
247 } 250 }
248 251
249 252
250 void 253 void
251 ngx_syslog_writer(ngx_log_t *log, ngx_uint_t level, u_char *buf, 254 ngx_syslog_writer(ngx_log_t *log, ngx_uint_t level, u_char *buf,
290 if (ngx_syslog_init_peer(peer) != NGX_OK) { 293 if (ngx_syslog_init_peer(peer) != NGX_OK) {
291 return NGX_ERROR; 294 return NGX_ERROR;
292 } 295 }
293 } 296 }
294 297
295 /* log syslog socket events with valid log */
296 peer->conn.log = ngx_cycle->log;
297
298 if (ngx_send) { 298 if (ngx_send) {
299 n = ngx_send(&peer->conn, buf, len); 299 n = ngx_send(&peer->conn, buf, len);
300 300
301 } else { 301 } else {
302 /* event module has not yet set ngx_io */ 302 /* event module has not yet set ngx_io */
304 } 304 }
305 305
306 if (n == NGX_ERROR) { 306 if (n == NGX_ERROR) {
307 307
308 if (ngx_close_socket(peer->conn.fd) == -1) { 308 if (ngx_close_socket(peer->conn.fd) == -1) {
309 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 309 ngx_log_error(NGX_LOG_ALERT, peer->log, ngx_socket_errno,
310 ngx_close_socket_n " failed"); 310 ngx_close_socket_n " failed");
311 } 311 }
312 312
313 peer->conn.fd = (ngx_socket_t) -1; 313 peer->conn.fd = (ngx_socket_t) -1;
314 } 314 }
322 { 322 {
323 ngx_socket_t fd; 323 ngx_socket_t fd;
324 324
325 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0); 325 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0);
326 if (fd == (ngx_socket_t) -1) { 326 if (fd == (ngx_socket_t) -1) {
327 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 327 ngx_log_error(NGX_LOG_ALERT, peer->log, ngx_socket_errno,
328 ngx_socket_n " failed"); 328 ngx_socket_n " failed");
329 return NGX_ERROR; 329 return NGX_ERROR;
330 } 330 }
331 331
332 if (ngx_nonblocking(fd) == -1) { 332 if (ngx_nonblocking(fd) == -1) {
333 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 333 ngx_log_error(NGX_LOG_ALERT, peer->log, ngx_socket_errno,
334 ngx_nonblocking_n " failed"); 334 ngx_nonblocking_n " failed");
335 goto failed; 335 goto failed;
336 } 336 }
337 337
338 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) { 338 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) {
339 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 339 ngx_log_error(NGX_LOG_ALERT, peer->log, ngx_socket_errno,
340 "connect() failed"); 340 "connect() failed");
341 goto failed; 341 goto failed;
342 } 342 }
343 343
344 peer->conn.fd = fd; 344 peer->conn.fd = fd;
345 peer->conn.log = peer->log;
345 346
346 /* UDP sockets are always ready to write */ 347 /* UDP sockets are always ready to write */
347 peer->conn.write->ready = 1; 348 peer->conn.write->ready = 1;
348 349
349 return NGX_OK; 350 return NGX_OK;
350 351
351 failed: 352 failed:
352 353
353 if (ngx_close_socket(fd) == -1) { 354 if (ngx_close_socket(fd) == -1) {
354 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 355 ngx_log_error(NGX_LOG_ALERT, peer->log, ngx_socket_errno,
355 ngx_close_socket_n " failed"); 356 ngx_close_socket_n " failed");
356 } 357 }
357 358
358 return NGX_ERROR; 359 return NGX_ERROR;
359 } 360 }
370 if (peer->conn.fd == (ngx_socket_t) -1) { 371 if (peer->conn.fd == (ngx_socket_t) -1) {
371 return; 372 return;
372 } 373 }
373 374
374 if (ngx_close_socket(peer->conn.fd) == -1) { 375 if (ngx_close_socket(peer->conn.fd) == -1) {
375 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 376 ngx_log_error(NGX_LOG_ALERT, peer->log, ngx_socket_errno,
376 ngx_close_socket_n " failed"); 377 ngx_close_socket_n " failed");
377 } 378 }
378 } 379 }