summaryrefslogtreecommitdiff
path: root/indra/llcommon/llerror.cpp
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2020-05-06 16:06:26 -0400
committerNat Goodspeed <nat@lindenlab.com>2020-05-06 16:06:26 -0400
commitca6f09292925a7bd936338cb598efb3ddc8524bf (patch)
tree3f27e75fc8443b84e91fcac400084fd83dfed26a /indra/llcommon/llerror.cpp
parent4768d092f611576b4e4e95574e9b16192e7ced5e (diff)
parent4a7fd0117a43dca9e30c58c6417ebdf6862561f6 (diff)
DRTVWR-476: Merge branch 'master' of lindenlab/viewer into DRTVWR-476-boost-1.72
Diffstat (limited to 'indra/llcommon/llerror.cpp')
-rw-r--r--indra/llcommon/llerror.cpp53
1 files changed, 30 insertions, 23 deletions
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
index 0daae96cca..41c4ddc725 100644
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -193,39 +193,46 @@ namespace {
return LLError::getEnabledLogTypesMask() & 0x04;
}
+ LL_FORCE_INLINE std::string createANSI(const std::string& color)
+ {
+ std::string ansi_code;
+ ansi_code += '\033';
+ ansi_code += "[";
+ ansi_code += color;
+ ansi_code += "m";
+ return ansi_code;
+ }
+
virtual void recordMessage(LLError::ELevel level,
const std::string& message) override
{
+ static std::string s_ansi_error = createANSI("31"); // red
+ static std::string s_ansi_warn = createANSI("34"); // blue
+ static std::string s_ansi_debug = createANSI("35"); // magenta
+
if (mUseANSI)
{
- // Default all message levels to bold so we can distinguish our own messages from those dumped by subprocesses and libraries.
- colorANSI("1"); // bold
- switch (level) {
- case LLError::LEVEL_ERROR:
- colorANSI("31"); // red
- break;
- case LLError::LEVEL_WARN:
- colorANSI("34"); // blue
- break;
- case LLError::LEVEL_DEBUG:
- colorANSI("35"); // magenta
- break;
- default:
- break;
- }
+ writeANSI((level == LLError::LEVEL_ERROR) ? s_ansi_error :
+ (level == LLError::LEVEL_WARN) ? s_ansi_warn :
+ s_ansi_debug, message);
}
- fprintf(stderr, "%s\n", message.c_str());
- if (mUseANSI) colorANSI("0"); // reset
+ else
+ {
+ fprintf(stderr, "%s\n", message.c_str());
+ }
}
private:
bool mUseANSI;
- void colorANSI(const std::string color)
+ LL_FORCE_INLINE void writeANSI(const std::string& ansi_code, const std::string& message)
{
- // ANSI color code escape sequence
- fprintf(stderr, "\033[%sm", color.c_str() );
- };
+ static std::string s_ansi_bold = createANSI("1"); // bold
+ static std::string s_ansi_reset = createANSI("0"); // reset
+ // ANSI color code escape sequence, message, and reset in one fprintf call
+ // Default all message levels to bold so we can distinguish our own messages from those dumped by subprocesses and libraries.
+ fprintf(stderr, "%s%s%s\n%s", s_ansi_bold.c_str(), ansi_code.c_str(), message.c_str(), s_ansi_reset.c_str() );
+ }
static bool checkANSI(void)
{
@@ -236,8 +243,8 @@ namespace {
return (0 != isatty(2)) &&
(NULL == getenv("LL_NO_ANSI_COLOR"));
#endif // LL_LINUX
- return false;
- };
+ return FALSE; // works in a cygwin shell... ;)
+ }
};
class RecordToFixedBuffer : public LLError::Recorder