aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin/settingtypes.txt7
-rw-r--r--src/defaultsettings.cpp1
-rw-r--r--src/log.cpp2
-rw-r--r--src/log.h26
-rw-r--r--src/main.cpp20
5 files changed, 38 insertions, 18 deletions
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 821762521..08e51171f 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -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
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 0d1b3aa86..586408dcf 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -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");
diff --git a/src/log.cpp b/src/log.cpp
index 3e9229e38..c84a847a5 100644
--- a/src/log.cpp
+++ b/src/log.cpp
@@ -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;
diff --git a/src/log.h b/src/log.h
index 506137739..952ebadb1 100644
--- 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 @@ public:
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 @@ public:
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 @@ public:
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 {
diff --git a/src/main.cpp b/src/main.cpp
index 7f9f0967e..d9073cfb8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -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;