--- main/logger.c.orig 2009-10-02 05:05:28.000000000 +0200 +++ main/logger.c 2010-02-08 10:25:54.000000000 +0100 @@ -742,6 +742,36 @@ return 0; } +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, char *str, long pid) { char buf[BUFSIZ]; @@ -821,6 +851,7 @@ continue; /* Print out to the file */ + strip_coloring(logmsg->str); res = fprintf(chan->fileptr, "[%s] %s[%ld] %s: %s", logmsg->date, levels[logmsg->level], logmsg->process_id, logmsg->file, logmsg->str); if (res <= 0 && !ast_strlen_zero(logmsg->str)) {