aboutsummaryrefslogtreecommitdiffstats
path: root/logger.c
diff options
context:
space:
mode:
authorkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-04-01 23:49:57 +0000
committerkpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b>2005-04-01 23:49:57 +0000
commite8db74a3cd100b3cf1df6384826f129dbc3249eb (patch)
treeb90319e983827406f1f62c19dba1d2bda825734d /logger.c
parenta606c8bd6a74870fa75e72203dc5361ac4d4cde5 (diff)
strip color code sequences from verbose messages being sent to files/syslog (bug #3929, with mods)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5354 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'logger.c')
-rwxr-xr-xlogger.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/logger.c b/logger.c
index a1cc185a0..96650c8f2 100755
--- a/logger.c
+++ b/logger.c
@@ -604,9 +604,40 @@ void close_logger(void)
return;
}
+static void strip_coloring(char *str)
+{
+ char *src = str, *dest, *end;
+
+ if (!src)
+ return;
+
+ /* find the first potential escape sequence in the string */
+
+ while (*src && (*src != '\033'))
+ src++;
+ 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() */
@@ -618,9 +649,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);
}
@@ -715,6 +748,7 @@ void ast_log(int level, const char *file, int line, const char *function, const
va_start(ap, fmt);
vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
+ strip_coloring(buf);
fputs(buf, chan->fileptr);
fflush(chan->fileptr);
}