diff --git a/include/proto/log.h b/include/proto/log.h index b994470dd..30d4dce7f 100644 --- a/include/proto/log.h +++ b/include/proto/log.h @@ -46,6 +46,8 @@ extern char clf_http_log_format[]; extern char default_rfc5424_sd_log_format[]; +extern unsigned int dropped_logs; + extern THREAD_LOCAL char *logheader; extern THREAD_LOCAL char *logheader_rfc5424; extern THREAD_LOCAL char *logline; diff --git a/include/types/stats.h b/include/types/stats.h index 2cb23bfdc..75250447e 100644 --- a/include/types/stats.h +++ b/include/types/stats.h @@ -293,6 +293,7 @@ enum info_field { INF_LISTENERS, INF_ACTIVE_PEERS, INF_CONNECTED_PEERS, + INF_DROPPED_LOGS, /* must always be the last one */ INF_TOTAL_FIELDS diff --git a/src/log.c b/src/log.c index 24e4c3ff0..3434550a3 100644 --- a/src/log.c +++ b/src/log.c @@ -210,6 +210,9 @@ char *log_format = NULL; */ char default_rfc5424_sd_log_format[] = "- "; +/* total number of dropped logs */ +unsigned int dropped_logs = 0; + /* This is a global syslog header, common to all outgoing messages in * RFC3164 format. It begins with time-based part and is updated by * update_log_hdr(). @@ -1478,7 +1481,9 @@ send: if (sent < 0) { static char once; - if (!once) { + if (errno == EAGAIN) + HA_ATOMIC_ADD(&dropped_logs, 1); + else if (!once) { once = 1; /* note: no need for atomic ops here */ ha_alert("sendmsg() failed in logger #%d: %s (errno=%d)\n", nblogger, strerror(errno), errno); diff --git a/src/stats.c b/src/stats.c index 78342cde7..07a5ef74e 100644 --- a/src/stats.c +++ b/src/stats.c @@ -135,6 +135,7 @@ const char *info_field_names[INF_TOTAL_FIELDS] = { [INF_LISTENERS] = "Listeners", [INF_ACTIVE_PEERS] = "ActivePeers", [INF_CONNECTED_PEERS] = "ConnectedPeers", + [INF_DROPPED_LOGS] = "DroppedLogs", }; const char *stat_field_names[ST_F_TOTAL_FIELDS] = { @@ -3302,6 +3303,7 @@ int stats_fill_info(struct field *info, int len) info[INF_LISTENERS] = mkf_u32(0, listeners); info[INF_ACTIVE_PEERS] = mkf_u32(0, active_peers); info[INF_CONNECTED_PEERS] = mkf_u32(0, connected_peers); + info[INF_DROPPED_LOGS] = mkf_u32(0, dropped_logs); return 1; }