]> git.lizzy.rs Git - dragonfireclient.git/commitdiff
Fix missing warningstream (or similar problem) (#7034)
authoryou <ovvv@web.de>
Sun, 4 Mar 2018 16:34:36 +0000 (17:34 +0100)
committerSmallJoker <SmallJoker@users.noreply.github.com>
Sun, 4 Mar 2018 16:34:36 +0000 (17:34 +0100)
Use the --color command line parameter instead of a setting for coloured logs

This fixes the missing warningstream bug, g_settings->get mustn't be used there.
Also, the decision about en- or disabling log colours fits better to the command line parameters than minetest settings.

builtin/settingtypes.txt
src/defaultsettings.cpp
src/log.cpp
src/log.h
src/main.cpp

index 821762521cf0b3bc64cd5787cb5b3566c959db44..08e51171f98b09f6aca0bb5d55d97300d6e1e424 100644 (file)
@@ -1212,13 +1212,6 @@ language (Language) enum   ,be,ca,cs,da,de,dv,en,eo,es,et,fr,he,hu,id,it,ja,jbo,
 #    -    verbose
 debug_log_level (Debug log level) enum action ,none,error,warning,action,info,verbose
 
-#    ANSI colored logs: red error log, yellow warning and grey info and verbose logs
-#    Note that it doesn't work on Windows
-#    "yes" always enables it,
-#    "detect" enables it when printing to terminal and
-#    "no" disables it
-log_color (Colored logs) enum detect yes,detect,no
-
 #    IPv6 support.
 enable_ipv6 (IPv6) bool true
 
index 0d1b3aa86c052c3f77280797d543e6a4a76e39ea..586408dcf5acd30242c052d5cfe15408a68a8058 100644 (file)
@@ -351,7 +351,6 @@ void set_default_settings(Settings *settings)
        settings->setDefault("ignore_world_load_errors", "false");
        settings->setDefault("remote_media", "");
        settings->setDefault("debug_log_level", "action");
-       settings->setDefault("log_color", "detect");
        settings->setDefault("emergequeue_limit_total", "256");
        settings->setDefault("emergequeue_limit_diskonly", "32");
        settings->setDefault("emergequeue_limit_generate", "32");
index 3e9229e38799485c58300082c72190ef45755b8b..c84a847a5073bfaffaf944a99fba3c6064a2dc0b 100644 (file)
@@ -251,6 +251,8 @@ const std::string Logger::getLevelLabel(LogLevel lev)
        return names[lev];
 }
 
+LogColor Logger::color_mode = LOG_COLOR_AUTO;
+
 const std::string Logger::getThreadName()
 {
        std::map<std::thread::id, std::string>::const_iterator it;
index 506137739a06a9d6f3b861e8eae075127f679d34..952ebadb1959a8544ea2b1f1a139e33007136c9f 100644 (file)
--- a/src/log.h
+++ b/src/log.h
@@ -28,7 +28,6 @@ with this program; if not, write to the Free Software Foundation, Inc.,
 #if !defined(_WIN32)  // POSIX
        #include <unistd.h>
 #endif
-#include "settings.h"
 #include "irrlichttypes.h"
 
 class ILogOutput;
@@ -43,6 +42,12 @@ enum LogLevel {
        LL_MAX,
 };
 
+enum LogColor {
+       LOG_COLOR_NEVER,
+       LOG_COLOR_ALWAYS,
+       LOG_COLOR_AUTO,
+};
+
 typedef u8 LogLevelMask;
 #define LOGLEVEL_TO_MASKLEVEL(x) (1 << x)
 
@@ -68,6 +73,8 @@ class Logger {
        static LogLevel stringToLevel(const std::string &name);
        static const std::string getLevelLabel(LogLevel lev);
 
+       static LogColor color_mode;
+
 private:
        void logToOutputsRaw(LogLevel, const std::string &line);
        void logToOutputs(LogLevel, const std::string &combined,
@@ -111,18 +118,17 @@ class StreamLogOutput : public ICombinedLogOutput {
                m_stream(stream)
        {
 #if !defined(_WIN32)
-               is_tty = isatty(fileno(stdout));
+               colored = (Logger::color_mode == LOG_COLOR_ALWAYS) ||
+                       (Logger::color_mode == LOG_COLOR_AUTO && isatty(fileno(stdout)));
 #else
-               is_tty = false;
+               colored = Logger::color_mode == LOG_COLOR_ALWAYS;
 #endif
        }
 
        void logRaw(LogLevel lev, const std::string &line)
        {
-               static const std::string use_logcolor = g_settings->get("log_color");
-
-               bool colored = use_logcolor == "detect" ? is_tty : use_logcolor == "yes";
-               if (colored)
+               bool colored_message = colored;
+               if (colored_message)
                        switch (lev) {
                        case LL_ERROR:
                                // error is red
@@ -142,19 +148,19 @@ class StreamLogOutput : public ICombinedLogOutput {
                                break;
                        default:
                                // action is white
-                               colored = false;
+                               colored_message = false;
                        }
 
                m_stream << line << std::endl;
 
-               if (colored)
+               if (colored_message)
                        // reset to white color
                        m_stream << "\033[0m";
        }
 
 private:
        std::ostream &m_stream;
-       bool is_tty;
+       bool colored;
 };
 
 class FileLogOutput : public ICombinedLogOutput {
index 7f9f0967ecffd99ed540c2d130256de10cbede6e..d9073cfb859e59806784b7610b9f97b0441e6c02 100644 (file)
@@ -266,6 +266,15 @@ static void set_allowed_options(OptionList *allowed_options)
                        "'name' lists names, 'both' lists both)"))));
        allowed_options->insert(std::make_pair("quiet", ValueSpec(VALUETYPE_FLAG,
                        _("Print to console errors only"))));
+#if !defined(_WIN32)
+       allowed_options->insert(std::make_pair("color", ValueSpec(VALUETYPE_STRING,
+                       _("Coloured logs ('always', 'never' or 'auto'), defaults to 'auto'"
+                       ))));
+#else
+       allowed_options->insert(std::make_pair("color", ValueSpec(VALUETYPE_STRING,
+                       _("Coloured logs ('always' or 'never'), defaults to 'never'"
+                       ))));
+#endif
        allowed_options->insert(std::make_pair("info", ValueSpec(VALUETYPE_FLAG,
                        _("Print more information to console"))));
        allowed_options->insert(std::make_pair("verbose",  ValueSpec(VALUETYPE_FLAG,
@@ -393,6 +402,17 @@ static void setup_log_params(const Settings &cmd_args)
                g_logger.addOutputMaxLevel(&stderr_output, LL_ERROR);
        }
 
+       // Coloured log messages (see log.h)
+       if (cmd_args.exists("color")) {
+               std::string mode = cmd_args.get("color");
+               if (mode == "auto")
+                       Logger::color_mode = LOG_COLOR_AUTO;
+               else if (mode == "always")
+                       Logger::color_mode = LOG_COLOR_ALWAYS;
+               else
+                       Logger::color_mode = LOG_COLOR_NEVER;
+       }
+
        // If trace is enabled, enable logging of certain things
        if (cmd_args.getFlag("trace")) {
                dstream << _("Enabling trace level debug output") << std::endl;