Hi Balázs,
LogWriter: added support for a new flag 'ignore-errors'
Unfortunately, I can't get syslog-ng to re-write a broken message, even with fsync(yes). However, with your patch, it feels safer, because *if* a blocking message would be there, it would be ignored from now on. On 02-03-11 10:42, Balazs Scheidler wrote:
It is on 3.3 currently, but should probably be quite easy to backport it to 3.2
Yes, that was easy. For those interested: diff --git a/lib/logwriter.c b/lib/logwriter.c index b14cb57..968d22b 100644 --- a/lib/logwriter.c +++ b/lib/logwriter.c @@ -731,10 +731,18 @@ log_writer_flush(LogWriter *self, gboolean flush_all) status = log_proto_post(proto, (guchar *) line->str, line->len, &cons if (status == LPS_ERROR) { - msg_set_context(NULL); - g_string_free(line, TRUE); - return FALSE; - } + if ((self->options->options & LWO_IGNORE_ERRORS) == 0) + { + msg_set_context(NULL); + g_string_free(line, TRUE); + return FALSE; + } + else + { + consumed = TRUE; + g_free(line->str); + } + } if (consumed) { line->str = g_malloc0(1); @@ -991,6 +999,8 @@ log_writer_options_lookup_flag(const gchar *flag) return LWO_SYSLOG_PROTOCOL; if (strcmp(flag, "no-multi-line") == 0 || strcmp(flag, "no_multi_line") == 0) return LWO_NO_MULTI_LINE; + if (strcmp(flag, "ignore-errors") == 0 || strcmp(flag, "ignore_errors") == 0) + return LWO_IGNORE_ERRORS; msg_error("Unknown dest writer flag", evt_tag_str("flag", flag), NULL); return 0; } diff --git a/lib/logwriter.h b/lib/logwriter.h index 46244f4..7a316a1 100644 --- a/lib/logwriter.h +++ b/lib/logwriter.h @@ -45,6 +45,7 @@ #define LWO_NO_STATS 0x0004 /* several writers use the same counter */ #define LWO_SHARE_STATS 0x0008 +#define LWO_IGNORE_ERRORS 0x0020 typedef struct _LogWriterOptions {