diff --git a/src/log.h b/src/log.h index 952ebadb..1427d136 100644 --- a/src/log.h +++ b/src/log.h @@ -118,16 +118,16 @@ public: m_stream(stream) { #if !defined(_WIN32) - colored = (Logger::color_mode == LOG_COLOR_ALWAYS) || - (Logger::color_mode == LOG_COLOR_AUTO && isatty(fileno(stdout))); + is_tty = isatty(fileno(stdout)); #else - colored = Logger::color_mode == LOG_COLOR_ALWAYS; + is_tty = false; #endif } void logRaw(LogLevel lev, const std::string &line) { - bool colored_message = colored; + bool colored_message = (Logger::color_mode == LOG_COLOR_ALWAYS) || + (Logger::color_mode == LOG_COLOR_AUTO && is_tty); if (colored_message) switch (lev) { case LL_ERROR: @@ -160,7 +160,7 @@ public: private: std::ostream &m_stream; - bool colored; + bool is_tty; }; class FileLogOutput : public ICombinedLogOutput { diff --git a/src/main.cpp b/src/main.cpp index 26ad978c..e4e47b1a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -407,14 +407,25 @@ static void setup_log_params(const Settings &cmd_args) } // Coloured log messages (see log.h) + std::string color_mode; if (cmd_args.exists("color")) { - std::string mode = cmd_args.get("color"); - if (mode == "auto") + color_mode = cmd_args.get("color"); +#if !defined(_WIN32) + } else { + char *color_mode_env = getenv("MT_LOGCOLOR"); + if (color_mode_env) + color_mode = color_mode_env; +#endif + } + if (color_mode != "") { + if (color_mode == "auto") Logger::color_mode = LOG_COLOR_AUTO; - else if (mode == "always") + else if (color_mode == "always") Logger::color_mode = LOG_COLOR_ALWAYS; - else + else if (color_mode == "never") Logger::color_mode = LOG_COLOR_NEVER; + else + errorstream << "Invalid color mode: " << color_mode << std::endl; } // If trace is enabled, enable logging of certain things