|
|
|
@ -478,9 +478,39 @@ void close_logger(void)
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void strip_coloring(char *str)
|
|
|
|
|
{
|
|
|
|
|
char *src, *dest, *end;
|
|
|
|
|
|
|
|
|
|
if (!str)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
/* find the first potential escape sequence in the string */
|
|
|
|
|
|
|
|
|
|
src = strchr(str, '\033');
|
|
|
|
|
if (!src)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
dest = src;
|
|
|
|
|
while (*src) {
|
|
|
|
|
/* at the top of this loop, *src will always be an ESC character */
|
|
|
|
|
if ((src[1] == '[') && ((end = strchr(src + 2, 'm'))))
|
|
|
|
|
src = end + 1;
|
|
|
|
|
else
|
|
|
|
|
*dest++ = *src++;
|
|
|
|
|
|
|
|
|
|
/* copy characters, checking for ESC as we go */
|
|
|
|
|
while (*src && (*src != '\033'))
|
|
|
|
|
*dest++ = *src++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
*dest = '\0';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void ast_log_vsyslog(int level, const char *file, int line, const char *function, const char *fmt, va_list args)
|
|
|
|
|
{
|
|
|
|
|
char buf[BUFSIZ];
|
|
|
|
|
char *s;
|
|
|
|
|
|
|
|
|
|
if (level >= SYSLOG_NLEVELS) {
|
|
|
|
|
/* we are locked here, so cannot ast_log() */
|
|
|
|
@ -492,9 +522,11 @@ static void ast_log_vsyslog(int level, const char *file, int line, const char *f
|
|
|
|
|
level = __LOG_DEBUG;
|
|
|
|
|
} else {
|
|
|
|
|
snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: ",
|
|
|
|
|
levels[level], (long)GETTID(), file, line, function);
|
|
|
|
|
levels[level], (long)GETTID(), file, line, function);
|
|
|
|
|
}
|
|
|
|
|
vsnprintf(buf+strlen(buf), sizeof(buf)-strlen(buf), fmt, args);
|
|
|
|
|
s = buf + strlen(buf);
|
|
|
|
|
vsnprintf(s, sizeof(buf) - strlen(buf), fmt, args);
|
|
|
|
|
strip_coloring(s);
|
|
|
|
|
syslog(syslog_level_map[level], "%s", buf);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -567,6 +599,7 @@ void ast_log(int level, const char *file, int line, const char *function, const
|
|
|
|
|
fprintf(chan->fileptr, buf);
|
|
|
|
|
va_start(ap, fmt);
|
|
|
|
|
vsnprintf(buf, sizeof(buf), fmt, ap);
|
|
|
|
|
strip_coloring(buf);
|
|
|
|
|
va_end(ap);
|
|
|
|
|
fputs(buf, chan->fileptr);
|
|
|
|
|
fflush(chan->fileptr);
|
|
|
|
|