static int logger_messages_discarded;
static unsigned int high_water_alert;
+/* On some platforms, like those with MUSL as the runtime, BUFSIZ is
+ * unreasonably small (1024). Use a larger value in those environments.
+ */
+#define LOGMSG_SIZE MAX(BUFSIZ, 8192)
+
static enum rotatestrategy {
NONE = 0, /* Do not rotate log files at all, instead rely on external mechanisms */
SEQUENTIAL = 1 << 0, /* Original method - create a new file, in order */
static void logger_print_normal(struct logmsg *logmsg)
{
struct logchannel *chan = NULL;
- char buf[BUFSIZ];
+ char buf[LOGMSG_SIZE];
int level = 0;
AST_RWLIST_RDLOCK(&logchannels);
/* Don't use LOG_MAKEPRI because it's broken in glibc<2.17 */
syslog_level = chan->facility | syslog_level; /* LOG_MAKEPRI(chan->facility, syslog_level); */
- if (!chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+ if (!chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
syslog(syslog_level, "%s", buf);
}
}
break;
case LOGTYPE_CONSOLE:
- if (!chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+ if (!chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
ast_console_puts_mutable_full(buf, logmsg->level, logmsg->sublevel);
}
break;
continue;
}
- if (chan->formatter.format_log(chan, logmsg, buf, BUFSIZ)) {
+ if (chan->formatter.format_log(chan, logmsg, buf, sizeof(buf))) {
continue;
}
}
/* Build string */
- res = ast_str_set_va(&buf, BUFSIZ, fmt, ap);
+ res = ast_str_set_va(&buf, LOGMSG_SIZE, fmt, ap);
/* If the build failed, then abort and free this structure */
if (res == AST_DYNSTR_BUILD_FAILED) {