From cf71082000bb53332498c50d8dfdbf5783ac2a7d Mon Sep 17 00:00:00 2001 From: Yoav Steinberg Date: Tue, 26 Apr 2022 10:14:26 +0300 Subject: [PATCH 1/4] basic support for colorized logging --- src/server.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/server.c b/src/server.c index c2e2be8fa..7b5040cb5 100644 --- a/src/server.c +++ b/src/server.c @@ -101,6 +101,7 @@ void nolocks_localtime(struct tm *tmp, time_t t, time_t tz, int dst); void serverLogRaw(int level, const char *msg) { const int syslogLevelMap[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING }; const char *c = ".-*#"; + const char *level_color[] = {"\033[30m", "\033[37m", "\033[32m", "\033[31m"}; FILE *fp; char buf[64]; int rawmode = (level & LL_RAW); @@ -132,8 +133,14 @@ void serverLogRaw(int level, const char *msg) { } else { role_char = (server.masterhost ? 'S':'M'); /* Slave or Master. */ } - fprintf(fp,"%d:%c %s %c %s\n", - (int)getpid(),role_char, buf,c[level],msg); + const char *pre = ""; + const char *post = ""; + if (isatty(fileno(fp))) { + pre = level_color[level]; + post = "\033[0m"; + } + fprintf(fp,"%d:%c %s %s%c%s %s\n", + (int)getpid(),role_char, buf, pre, c[level], post, msg); } fflush(fp); From 54cb22abf31575352e6679b8542ef4d1883cac61 Mon Sep 17 00:00:00 2001 From: Yoav Steinberg Date: Thu, 28 Apr 2022 14:58:37 +0300 Subject: [PATCH 2/4] some more colorization --- src/server.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/server.c b/src/server.c index 7b5040cb5..f65a0e36b 100644 --- a/src/server.c +++ b/src/server.c @@ -98,10 +98,26 @@ void nolocks_localtime(struct tm *tmp, time_t t, time_t tz, int dst); /* Low level logging. To use only for very big messages, otherwise * serverLog() is to prefer. */ +#define ANSI_BLACK "\033[30m" +#define ANSI_RED "\033[31m" +#define ANSI_GREEN "\033[32m" +#define ANSI_YELLOW "\033[33m" +#define ANSI_BLUE "\033[34m" +#define ANSI_MAGENTA "\033[35m" +#define ANSI_CYAN "\033[36m" +#define ANSI_WHITE "\033[37m" +#define ANSI_RESET "\033[0m" +#define ANSI_BLACK_BOLD "\033[30;1m" +#define ANSI_RED_BOLD "\033[31;1m" +#define ANSI_GREEN_BOLD "\033[32;1m" +#define ANSI_YELLOW_BOLD "\033[33;1m" +#define ANSI_MAGENTA_BOLD "\033[35;1m" +#define ANSI_WHITE_BOLD "\033[37;1m" +#define ANSI_BOLD "\033[1m" void serverLogRaw(int level, const char *msg) { const int syslogLevelMap[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING }; const char *c = ".-*#"; - const char *level_color[] = {"\033[30m", "\033[37m", "\033[32m", "\033[31m"}; + const char *level_color[] = {ANSI_RESET, ANSI_YELLOW_BOLD, ANSI_GREEN_BOLD, ANSI_RED_BOLD }; FILE *fp; char buf[64]; int rawmode = (level & LL_RAW); @@ -133,14 +149,13 @@ void serverLogRaw(int level, const char *msg) { } else { role_char = (server.masterhost ? 'S':'M'); /* Slave or Master. */ } - const char *pre = ""; - const char *post = ""; if (isatty(fileno(fp))) { - pre = level_color[level]; - post = "\033[0m"; + fprintf(fp, ANSI_CYAN"%d"ANSI_BLUE":"ANSI_MAGENTA"%c "ANSI_BLUE"%s %s%c "ANSI_RESET"%s%s\n"ANSI_RESET, + (int)getpid(), role_char, buf, level_color[level], c[level], level >= LL_WARNING ? ANSI_BOLD: "", msg); + } else { + fprintf(fp,"%d:%c %s %c %s\n", + (int)getpid(),role_char, buf, c[level], msg); } - fprintf(fp,"%d:%c %s %s%c%s %s\n", - (int)getpid(),role_char, buf, pre, c[level], post, msg); } fflush(fp); From 53eb967d62432401bfb2e245b1cee995ba456afa Mon Sep 17 00:00:00 2001 From: Yoav Steinberg Date: Thu, 12 May 2022 14:51:26 +0300 Subject: [PATCH 3/4] cache isatty() (performance) --- src/server.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server.c b/src/server.c index f65a0e36b..fdfa46226 100644 --- a/src/server.c +++ b/src/server.c @@ -122,6 +122,7 @@ void serverLogRaw(int level, const char *msg) { char buf[64]; int rawmode = (level & LL_RAW); int log_to_stdout = server.logfile[0] == '\0'; + static int stdout_isatty = -1; level &= 0xff; /* clear flags */ if (level < server.verbosity) return; @@ -129,6 +130,9 @@ void serverLogRaw(int level, const char *msg) { fp = log_to_stdout ? stdout : fopen(server.logfile,"a"); if (!fp) return; + if (log_to_stdout && stdout_isatty == -1) + stdout_isatty = isatty(fileno(fp)); + if (rawmode) { fprintf(fp,"%s",msg); } else { @@ -149,7 +153,7 @@ void serverLogRaw(int level, const char *msg) { } else { role_char = (server.masterhost ? 'S':'M'); /* Slave or Master. */ } - if (isatty(fileno(fp))) { + if (log_to_stdout && stdout_isatty) { fprintf(fp, ANSI_CYAN"%d"ANSI_BLUE":"ANSI_MAGENTA"%c "ANSI_BLUE"%s %s%c "ANSI_RESET"%s%s\n"ANSI_RESET, (int)getpid(), role_char, buf, level_color[level], c[level], level >= LL_WARNING ? ANSI_BOLD: "", msg); } else { From b4aa8a3fde6e5276d2aa07e738dc828d921905cf Mon Sep 17 00:00:00 2001 From: Yoav Steinberg Date: Thu, 12 May 2022 14:52:40 +0300 Subject: [PATCH 4/4] remove unused ANSI colors --- src/server.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/server.c b/src/server.c index fdfa46226..673560b6d 100644 --- a/src/server.c +++ b/src/server.c @@ -98,21 +98,13 @@ void nolocks_localtime(struct tm *tmp, time_t t, time_t tz, int dst); /* Low level logging. To use only for very big messages, otherwise * serverLog() is to prefer. */ -#define ANSI_BLACK "\033[30m" -#define ANSI_RED "\033[31m" -#define ANSI_GREEN "\033[32m" -#define ANSI_YELLOW "\033[33m" #define ANSI_BLUE "\033[34m" #define ANSI_MAGENTA "\033[35m" #define ANSI_CYAN "\033[36m" -#define ANSI_WHITE "\033[37m" #define ANSI_RESET "\033[0m" -#define ANSI_BLACK_BOLD "\033[30;1m" #define ANSI_RED_BOLD "\033[31;1m" #define ANSI_GREEN_BOLD "\033[32;1m" #define ANSI_YELLOW_BOLD "\033[33;1m" -#define ANSI_MAGENTA_BOLD "\033[35;1m" -#define ANSI_WHITE_BOLD "\033[37;1m" #define ANSI_BOLD "\033[1m" void serverLogRaw(int level, const char *msg) { const int syslogLevelMap[] = { LOG_DEBUG, LOG_INFO, LOG_NOTICE, LOG_WARNING };