Console logging to stdout and stderr
authorArmin Novak <armin.novak@thincast.com>
Wed, 6 May 2015 08:56:30 +0000 (10:56 +0200)
committerArmin Novak <armin.novak@thincast.com>
Wed, 6 May 2015 08:56:30 +0000 (10:56 +0200)
With this patch the default for the console logger
changes to writing to stdout for TRACE, DEBUG and INFO
messages and stderr for WARNING, ERROR and FATAL messages.

winpr/include/winpr/wlog.h
winpr/libwinpr/utils/wlog/ConsoleAppender.c

index bd55ffb..aea7a0d 100644 (file)
@@ -146,9 +146,10 @@ struct _wLogAppender
        WLOG_APPENDER_COMMON();
 };
 
-#define WLOG_CONSOLE_STDOUT    1
-#define WLOG_CONSOLE_STDERR    2
-#define WLOG_CONSOLE_DEBUG     3
+#define WLOG_CONSOLE_DEFAULT   0
+#define WLOG_CONSOLE_STDOUT            1
+#define WLOG_CONSOLE_STDERR            2
+#define WLOG_CONSOLE_DEBUG             4
 
 struct _wLogConsoleAppender
 {
index 5de8e15..77beb3d 100644 (file)
@@ -47,14 +47,14 @@ void WLog_ConsoleAppender_SetOutputStream(wLog* log, wLogConsoleAppender* append
                return;
 
        if (outputStream < 0)
-               outputStream = WLOG_CONSOLE_STDOUT;
+               outputStream = WLOG_CONSOLE_DEFAULT;
 
        if (outputStream == WLOG_CONSOLE_STDOUT)
                appender->outputStream = WLOG_CONSOLE_STDOUT;
        else if (outputStream == WLOG_CONSOLE_STDERR)
                appender->outputStream = WLOG_CONSOLE_STDERR;
        else
-               appender->outputStream = WLOG_CONSOLE_STDOUT;
+               appender->outputStream = WLOG_CONSOLE_DEFAULT;
 }
 
 int WLog_ConsoleAppender_Open(wLog* log, wLogConsoleAppender* appender)
@@ -123,9 +123,34 @@ int WLog_ConsoleAppender_WriteMessage(wLog* log, wLogConsoleAppender* appender,
                __android_log_print(level, log->Name, "%s%s", message->PrefixString, message->TextString);
 
 #else
-       fp = (appender->outputStream == WLOG_CONSOLE_STDERR) ? stderr : stdout;
+       switch(appender->outputStream)
+       {
+               case WLOG_CONSOLE_STDOUT:
+                       fp = stdout;
+                       break;
+               case WLOG_CONSOLE_STDERR:
+                       fp = stderr;
+                       break;
+               default:
+                       switch(message->Level)
+                       {
+                               case WLOG_TRACE:
+                               case WLOG_DEBUG:
+                               case WLOG_INFO:
+                                       fp = stdout;
+                                       break;
+                               case WLOG_OFF:
+                                       fp = NULL;
+                                       break;
+                               default:
+                                       fp = stderr;
+                                       break;
+                       }
+                       break;
+       }
 
-       fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
+       if (fp)
+               fprintf(fp, "%s%s\n", message->PrefixString, message->TextString);
 #endif
        return 1;
 }
@@ -211,11 +236,11 @@ wLogConsoleAppender* WLog_ConsoleAppender_New(wLog* log)
        ConsoleAppender->WritePacketMessage =
                        (WLOG_APPENDER_WRITE_PACKET_MESSAGE_FN) WLog_ConsoleAppender_WritePacketMessage;
 
-       ConsoleAppender->outputStream = WLOG_CONSOLE_STDOUT;
+       ConsoleAppender->outputStream = WLOG_CONSOLE_DEFAULT;
 
 #ifdef _WIN32
-    if (IsDebuggerPresent())
-        ConsoleAppender->outputStream = WLOG_CONSOLE_DEBUG;
+               if (IsDebuggerPresent())
+                               ConsoleAppender->outputStream = WLOG_CONSOLE_DEBUG;
 #endif
 
        return ConsoleAppender;