forked from Mirrorlandia_minetest/minetest
Add coloured logs (#4549)
The setting log_colour can be used to en-/disable or autodetect it.
This commit is contained in:
parent
4edf087090
commit
e049405fdc
@ -1207,6 +1207,13 @@ language (Language) enum ,be,ca,cs,da,de,en,eo,es,et,fr,he,hu,id,it,ja,jbo,ko,
|
||||
# - 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
|
||||
|
||||
|
@ -349,6 +349,7 @@ 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");
|
||||
|
40
src/log.h
40
src/log.h
@ -25,6 +25,10 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include <fstream>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
#if !defined(_WIN32) // POSIX
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#include "settings.h"
|
||||
#include "irrlichttypes.h"
|
||||
|
||||
class ILogOutput;
|
||||
@ -106,15 +110,51 @@ public:
|
||||
StreamLogOutput(std::ostream &stream) :
|
||||
m_stream(stream)
|
||||
{
|
||||
#if !defined(_WIN32)
|
||||
is_tty = isatty(fileno(stdout));
|
||||
#else
|
||||
is_tty = false;
|
||||
#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)
|
||||
switch (lev) {
|
||||
case LL_ERROR:
|
||||
// error is red
|
||||
m_stream << "\033[91m";
|
||||
break;
|
||||
case LL_WARNING:
|
||||
// warning is yellow
|
||||
m_stream << "\033[93m";
|
||||
break;
|
||||
case LL_INFO:
|
||||
// info is a bit dark
|
||||
m_stream << "\033[37m";
|
||||
break;
|
||||
case LL_VERBOSE:
|
||||
// verbose is darker than info
|
||||
m_stream << "\033[2m";
|
||||
break;
|
||||
default:
|
||||
// action is white
|
||||
colored = false;
|
||||
}
|
||||
|
||||
m_stream << line << std::endl;
|
||||
|
||||
if (colored)
|
||||
// reset to white color
|
||||
m_stream << "\033[0m";
|
||||
}
|
||||
|
||||
private:
|
||||
std::ostream &m_stream;
|
||||
bool is_tty;
|
||||
};
|
||||
|
||||
class FileLogOutput : public ICombinedLogOutput {
|
||||
|
Loading…
Reference in New Issue
Block a user