From 0eb462a86fb8a31c51383f36bffa7554efd94d27 Mon Sep 17 00:00:00 2001
From: Olivier SOLDANO <olivier.soldano@savoirfairelinux.com>
Date: Wed, 24 May 2017 16:30:42 -0400
Subject: [PATCH] change win32 logger for better readability

higten the colors, and reduce the size of the file paths
to fit in the fixed size window of win32 debug

Change-Id: I9b0d167b5f6b8ebdc74937129c31c7a828320bcf
Reviewed-by: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
---
 src/logger.cpp | 95 +++++++++++++++++++-------------------------------
 src/logger.h   | 25 +++++++------
 2 files changed, 48 insertions(+), 72 deletions(-)

diff --git a/src/logger.cpp b/src/logger.cpp
index f660e33cfa..6025a3b1ae 100644
--- a/src/logger.cpp
+++ b/src/logger.cpp
@@ -29,9 +29,9 @@
 #include "client/ring_signal.h"
 
 #ifdef RING_UWP
-#include <sys_time.h>
+# include <sys_time.h>
 #else
-#include <sys/time.h>
+# include <sys/time.h>
 #endif
 
 #include <string>
@@ -73,18 +73,12 @@
 #define YELLOW "\033[01;33m"
 #define CYAN "\033[22;36m"
 #else
-#ifdef RING_UWP
 #define FOREGROUND_WHITE 0x000f
 #define RED FOREGROUND_RED + 0x0008
 #define YELLOW FOREGROUND_RED + FOREGROUND_GREEN + 0x0008
 #define CYAN FOREGROUND_BLUE + FOREGROUND_GREEN + 0x0008
 #define LIGHT_GREEN FOREGROUND_GREEN + 0x0008
-#else
-#define RED FOREGROUND_RED
-#define YELLOW FOREGROUND_RED + FOREGROUND_GREEN
-#define CYAN FOREGROUND_BLUE + FOREGROUND_GREEN
-#endif
-#endif
+#endif // _WIN32
 
 static int consoleLog;
 static int debugMode;
@@ -118,7 +112,7 @@ getHeader(const char* ctx)
     out.fill(prev_fill);
 
     // Context
-    if (ctx) {
+    if (ctx){
 #ifdef RING_UWP
         out << "|" << std::setw(32) << ctx;
 #else
@@ -131,34 +125,38 @@ getHeader(const char* ctx)
     return out.str();
 }
 
-#ifdef RING_UWP
+#ifndef _WIN32
+
 void
-wlogger(const int level, const char* file, const char* format, ...)
+logger(const int level, const char* format, ...)
 {
     if (!debugMode && level == LOG_DEBUG)
         return;
 
-    const char* file_name_only = FILE_NAME_ONLY(file);
-    std::string buffer(file_name_only);
-    buffer.append(format);
-
     va_list ap;
     va_start(ap, format);
-    vlogger(level, buffer.c_str(), ap);
+    vlogger(level, format, ap);
     va_end(ap);
 }
+
 #else
+
 void
-logger(const int level, const char* format, ...)
+wlogger(const int level, const char* file, const char* format, ...)
 {
     if (!debugMode && level == LOG_DEBUG)
         return;
 
+    const char* file_name_only = FILE_NAME_ONLY(file);
+    std::string buffer(file_name_only);
+    buffer.append(format);
+
     va_list ap;
     va_start(ap, format);
-    vlogger(level, format, ap);
+    vlogger(level, buffer.c_str(), ap);
     va_end(ap);
 }
+
 #endif
 
 void
@@ -175,17 +173,16 @@ vlogger(const int level, const char *format, va_list ap)
 #ifndef _WIN32
         const char* color_header = CYAN;
         const char* color_prefix = "";
+
 #else
-#ifdef RING_UWP
         WORD color_prefix = LIGHT_GREEN;
-#else
-        WORD color_prefix = FOREGROUND_GREEN;
+        WORD color_header = CYAN;
+#endif
+#if defined(_WIN32) && !defined(RING_UWP)
         HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
         CONSOLE_SCREEN_BUFFER_INFO consoleInfo;
         WORD saved_attributes;
 #endif
-        WORD color_header = CYAN;
-#endif
 
         switch (level) {
             case LOG_ERR:
@@ -196,57 +193,37 @@ vlogger(const int level, const char *format, va_list ap)
                 break;
         }
 
-#ifdef _WIN32
-#if !defined(RING_UWP)
+#ifndef _WIN32
+        fputs(color_header, stderr);
+#elif !defined(RING_UWP)
         GetConsoleScreenBufferInfo(hConsole, &consoleInfo);
         saved_attributes = consoleInfo.wAttributes;
-#endif
+        SetConsoleTextAttribute(hConsole, color_header);
 #endif
 
-        // must exist, check LOG_FORMAT
-        auto sep = strchr(format, '|');
-        if (sep) {
-#ifndef _WIN32
-            fputs(color_header, stderr);
-#else
-#if !defined(RING_UWP)
-            SetConsoleTextAttribute(hConsole, color_header);
-#endif
-#endif
-            std::string ctx(format, sep - format);
-            format = sep + 2;
-            fputs(getHeader(ctx.c_str()).c_str(), stderr);
+        auto sep = strchr(format, '|'); // must exist, check LOG_FORMAT
+        std::string ctx(format, sep - format);
+        format = sep + 2;
+        fputs(getHeader(ctx.c_str()).c_str(), stderr);
 #ifdef RING_UWP
-            char tmp[4096];
-            vsprintf(tmp, format, ap);
-            ring::emitSignal<DRing::DebugSignal::MessageSend>(getHeader(ctx.c_str()).c_str() + std::string(tmp));
-#endif
-#ifndef _WIN32
-            fputs(END_COLOR, stderr);
-#else
-#if !defined(RING_UWP)
-            SetConsoleTextAttribute(hConsole, saved_attributes);
-#endif
+        char tmp[4096];
+        vsprintf(tmp, format, ap);
+        ring::emitSignal<DRing::DebugSignal::MessageSend>(getHeader(ctx.c_str()).c_str() + std::string(tmp));
 #endif
-        }
 #ifndef _WIN32
+        fputs(END_COLOR, stderr);
         fputs(color_prefix, stderr);
-#else
-#if !defined(RING_UWP)
+#elif !defined(RING_UWP)
+        SetConsoleTextAttribute(hConsole, saved_attributes);
         SetConsoleTextAttribute(hConsole, color_prefix);
-#endif
 #endif
 
         vfprintf(stderr, format, ap);
-        if (not sep)
-            fputs(ENDL, stderr);
 
 #ifndef _WIN32
         fputs(END_COLOR, stderr);
-#else
-#if !defined(RING_UWP)
+#elif !defined(RING_UWP)
         SetConsoleTextAttribute(hConsole, saved_attributes);
-#endif
 #endif
 
     } else {
diff --git a/src/logger.h b/src/logger.h
index 3a6570a459..765627a69d 100644
--- a/src/logger.h
+++ b/src/logger.h
@@ -34,14 +34,13 @@ extern "C" {
 /**
  * Print something, coloring it depending on the level
  */
-
-#ifdef RING_UWP
-  void wlogger(const int level, const char* file, const char* format, ...);
+#ifdef _WIN32
+    void wlogger(const int level, const char* file, const char* format, ...)
 #else
-  void logger(const int level, const char* format, ...)
+    void logger(const int level, const char* format, ...)
 #endif
 #if defined(_WIN32) && !defined(RING_UWP)
-    __attribute__((format(gnu_printf, 2, 3)))
+    __attribute__((format(gnu_printf, 3, 4)))
 #elif defined(__GNUC__)
     __attribute__((format(printf, 2, 3)))
 #endif
@@ -71,6 +70,12 @@ void strErr();
 #define STR(EXP) #EXP
 #define XSTR(X) STR(X)
 
+#ifdef RING_UWP
+#define FILE_NAME_ONLY(X) (strrchr(X, '\\') ? strrchr(X, '\\') + 1 : X)
+#elif defined(_WIN32)
+#define FILE_NAME_ONLY(X) (strrchr(X, '/') ? strrchr(X, '/') + 1 : X)
+#endif
+
 // Line return char in a string
 #ifdef RING_UWP
 #define ENDL " "
@@ -79,10 +84,9 @@ void strErr();
 #endif
 
 // Do not remove the "| " in following without modifying vlogger() code
-#ifndef RING_UWP
+#ifndef _WIN32
 #define LOG_FORMAT(M, ...) FILE_NAME ":" XSTR(__LINE__) "| " M, ##__VA_ARGS__
 #else
-#define FILE_NAME_ONLY(X) (strrchr(X, '\\') ? strrchr(X, '\\') + 1 : X)
 #define LOG_FORMAT(M, ...) ":" XSTR(__LINE__) "| " M, ##__VA_ARGS__
 #endif
 
@@ -118,12 +122,7 @@ void strErr();
 #define LOG_DEBUG   EVENTLOG_SUCCESS
 
 #define FILE_NAME __FILE__
-
-#ifndef RING_UWP
-#define LOGGER(M, LEVEL, ...) logger(LEVEL, LOG_FORMAT(M, ##__VA_ARGS__))
-#else
-#define LOGGER(M, LEVEL, ...) wlogger(LEVEL, FILE_NAME, LOG_FORMAT(M, ##__VA_ARGS__))
-#endif
+#define LOGGER(M, LEVEL, ...) wlogger(LEVEL, FILE_NAME,LOG_FORMAT(M, ##__VA_ARGS__))
 
 #else
 
-- 
GitLab