merge kevin's patches to remove color escape sequences from the logs (bug #3929)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@5394 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Russell Bryant
2005-04-05 06:09:27 +00:00
parent 8f0e43be23
commit 48f1386fff
2 changed files with 36 additions and 2 deletions

View File

@@ -24,6 +24,7 @@
in some media players
-- Fixed if the last line of text in a file for the call spool did not contain
a new line, it would not be processed
-- Fixed the logger so that color escape sequences wouldn't be sent to the logs
Asterisk 1.0.7

View File

@@ -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() */
@@ -494,7 +524,9 @@ static void ast_log_vsyslog(int level, const char *file, int line, const char *f
snprintf(buf, sizeof(buf), "%s[%ld]: %s:%d in %s: ",
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);