18
18
static char * ngx_syslog_parse_args (ngx_conf_t * cf , ngx_syslog_peer_t * peer ) ;
19
19
static ngx_int_t ngx_syslog_init_peer (ngx_syslog_peer_t * peer );
20
20
static void ngx_syslog_cleanup (void * data );
21
+ static u_char * ngx_syslog_log_error (ngx_log_t * log , u_char * buf , size_t len );
21
22
22
23
23
24
static char * facilities [] = {
@@ -66,6 +67,9 @@ ngx_syslog_process_conf(ngx_conf_t *cf, ngx_syslog_peer_t *peer)
66
67
ngx_str_set (& peer -> tag , "nginx" );
67
68
}
68
69
70
+ peer -> hostname = & cf -> cycle -> hostname ;
71
+ peer -> logp = & cf -> cycle -> new_log ;
72
+
69
73
peer -> conn .fd = (ngx_socket_t ) - 1 ;
70
74
71
75
peer -> conn .read = & ngx_syslog_dummy_event ;
@@ -243,7 +247,7 @@ ngx_syslog_add_header(ngx_syslog_peer_t *peer, u_char *buf)
243
247
}
244
248
245
249
return ngx_sprintf (buf , "<%ui>%V %V %V: " , pri , & ngx_cached_syslog_time ,
246
- & ngx_cycle -> hostname , & peer -> tag );
250
+ peer -> hostname , & peer -> tag );
247
251
}
248
252
249
253
@@ -286,15 +290,19 @@ ngx_syslog_send(ngx_syslog_peer_t *peer, u_char *buf, size_t len)
286
290
{
287
291
ssize_t n ;
288
292
293
+ if (peer -> log .handler == NULL ) {
294
+ peer -> log = * peer -> logp ;
295
+ peer -> log .handler = ngx_syslog_log_error ;
296
+ peer -> log .data = peer ;
297
+ peer -> log .action = "logging to syslog" ;
298
+ }
299
+
289
300
if (peer -> conn .fd == (ngx_socket_t ) - 1 ) {
290
301
if (ngx_syslog_init_peer (peer ) != NGX_OK ) {
291
302
return NGX_ERROR ;
292
303
}
293
304
}
294
305
295
- /* log syslog socket events with valid log */
296
- peer -> conn .log = ngx_cycle -> log ;
297
-
298
306
if (ngx_send ) {
299
307
n = ngx_send (& peer -> conn , buf , len );
300
308
@@ -306,7 +314,7 @@ ngx_syslog_send(ngx_syslog_peer_t *peer, u_char *buf, size_t len)
306
314
if (n == NGX_ERROR ) {
307
315
308
316
if (ngx_close_socket (peer -> conn .fd ) == -1 ) {
309
- ngx_log_error (NGX_LOG_ALERT , ngx_cycle -> log , ngx_socket_errno ,
317
+ ngx_log_error (NGX_LOG_ALERT , & peer -> log , ngx_socket_errno ,
310
318
ngx_close_socket_n " failed" );
311
319
}
312
320
@@ -324,24 +332,25 @@ ngx_syslog_init_peer(ngx_syslog_peer_t *peer)
324
332
325
333
fd = ngx_socket (peer -> server .sockaddr -> sa_family , SOCK_DGRAM , 0 );
326
334
if (fd == (ngx_socket_t ) - 1 ) {
327
- ngx_log_error (NGX_LOG_ALERT , ngx_cycle -> log , ngx_socket_errno ,
335
+ ngx_log_error (NGX_LOG_ALERT , & peer -> log , ngx_socket_errno ,
328
336
ngx_socket_n " failed" );
329
337
return NGX_ERROR ;
330
338
}
331
339
332
340
if (ngx_nonblocking (fd ) == -1 ) {
333
- ngx_log_error (NGX_LOG_ALERT , ngx_cycle -> log , ngx_socket_errno ,
341
+ ngx_log_error (NGX_LOG_ALERT , & peer -> log , ngx_socket_errno ,
334
342
ngx_nonblocking_n " failed" );
335
343
goto failed ;
336
344
}
337
345
338
346
if (connect (fd , peer -> server .sockaddr , peer -> server .socklen ) == -1 ) {
339
- ngx_log_error (NGX_LOG_ALERT , ngx_cycle -> log , ngx_socket_errno ,
347
+ ngx_log_error (NGX_LOG_ALERT , & peer -> log , ngx_socket_errno ,
340
348
"connect() failed" );
341
349
goto failed ;
342
350
}
343
351
344
352
peer -> conn .fd = fd ;
353
+ peer -> conn .log = & peer -> log ;
345
354
346
355
/* UDP sockets are always ready to write */
347
356
peer -> conn .write -> ready = 1 ;
@@ -351,7 +360,7 @@ ngx_syslog_init_peer(ngx_syslog_peer_t *peer)
351
360
failed :
352
361
353
362
if (ngx_close_socket (fd ) == -1 ) {
354
- ngx_log_error (NGX_LOG_ALERT , ngx_cycle -> log , ngx_socket_errno ,
363
+ ngx_log_error (NGX_LOG_ALERT , & peer -> log , ngx_socket_errno ,
355
364
ngx_close_socket_n " failed" );
356
365
}
357
366
@@ -372,7 +381,30 @@ ngx_syslog_cleanup(void *data)
372
381
}
373
382
374
383
if (ngx_close_socket (peer -> conn .fd ) == -1 ) {
375
- ngx_log_error (NGX_LOG_ALERT , ngx_cycle -> log , ngx_socket_errno ,
384
+ ngx_log_error (NGX_LOG_ALERT , & peer -> log , ngx_socket_errno ,
376
385
ngx_close_socket_n " failed" );
377
386
}
378
387
}
388
+
389
+
390
+ static u_char *
391
+ ngx_syslog_log_error (ngx_log_t * log , u_char * buf , size_t len )
392
+ {
393
+ u_char * p ;
394
+ ngx_syslog_peer_t * peer ;
395
+
396
+ p = buf ;
397
+
398
+ if (log -> action ) {
399
+ p = ngx_snprintf (buf , len , " while %s" , log -> action );
400
+ len -= p - buf ;
401
+ }
402
+
403
+ peer = log -> data ;
404
+
405
+ if (peer ) {
406
+ p = ngx_snprintf (p , len , ", server: %V" , & peer -> server .name );
407
+ }
408
+
409
+ return p ;
410
+ }
0 commit comments