From 5019493332ae66adbc616f99fc85ef32938aa1e2 Mon Sep 17 00:00:00 2001 From: XMRig Date: Sat, 19 May 2018 13:06:49 +0700 Subject: [PATCH] Correctly reset colors in FileLog. --- src/common/log/ConsoleLog.cpp | 2 +- src/common/log/ConsoleLog.h | 2 +- src/common/log/FileLog.cpp | 34 +++++++++++++++++++++------------- src/common/log/FileLog.h | 9 ++++++++- src/common/log/Log.cpp | 14 +++++++++----- src/common/log/Log.h | 11 ----------- src/common/log/SysLog.cpp | 4 ++-- src/core/Controller.cpp | 2 +- src/interfaces/ILogBackend.h | 2 ++ 9 files changed, 45 insertions(+), 35 deletions(-) diff --git a/src/common/log/ConsoleLog.cpp b/src/common/log/ConsoleLog.cpp index a1b6648d..6cf61980 100644 --- a/src/common/log/ConsoleLog.cpp +++ b/src/common/log/ConsoleLog.cpp @@ -97,7 +97,7 @@ void ConsoleLog::message(Level level, const char* fmt, va_list args) void ConsoleLog::text(const char* fmt, va_list args) { - snprintf(m_fmt, sizeof(m_fmt) - 1, "%s%s\n", fmt, m_controller->config()->isColors() ? Log::kCL_N : ""); + snprintf(m_fmt, sizeof(m_fmt) - 1, "%s%s", fmt, Log::endl(m_controller->config()->isColors())); print(args); } diff --git a/src/common/log/ConsoleLog.h b/src/common/log/ConsoleLog.h index a3b0a33a..81813c81 100644 --- a/src/common/log/ConsoleLog.h +++ b/src/common/log/ConsoleLog.h @@ -48,7 +48,7 @@ private: bool isWritable() const; void print(va_list args); - char m_buf[512]; + char m_buf[kBufferSize]; char m_fmt[256]; uv_buf_t m_uvBuf; uv_stream_t *m_stream; diff --git a/src/common/log/FileLog.cpp b/src/common/log/FileLog.cpp index 367f0f68..9134c7c7 100644 --- a/src/common/log/FileLog.cpp +++ b/src/common/log/FileLog.cpp @@ -30,9 +30,13 @@ #include "common/log/FileLog.h" +#include "common/log/Log.h" +#include "core/Config.h" +#include "core/Controller.h" -FileLog::FileLog(const char *fileName) +FileLog::FileLog(xmrig::Controller *controller, const char *fileName) : + m_controller(controller) { uv_fs_t req; m_file = uv_fs_open(uv_default_loop(), &req, fileName, O_CREAT | O_APPEND | O_WRONLY, 0644, nullptr); @@ -55,19 +59,24 @@ void FileLog::message(Level level, const char* fmt, va_list args) localtime_r(&now, &stime); # endif - char *buf = new char[512]; - int size = snprintf(buf, 23, "[%d-%02d-%02d %02d:%02d:%02d] ", - stime.tm_year + 1900, - stime.tm_mon + 1, - stime.tm_mday, - stime.tm_hour, - stime.tm_min, - stime.tm_sec); + const bool isColors = m_controller->config()->isColors(); - size = vsnprintf(buf + size, 512 - size - 1, fmt, args) + size; - buf[size] = '\n'; + snprintf(m_fmt, sizeof(m_fmt) - 1, "[%d-%02d-%02d %02d:%02d:%02d]%s %s%s", + stime.tm_year + 1900, + stime.tm_mon + 1, + stime.tm_mday, + stime.tm_hour, + stime.tm_min, + stime.tm_sec, + Log::colorByLevel(level, isColors), + fmt, + Log::endl(isColors) + ); - write(buf, size + 1); + char *buf = new char[kBufferSize]; + const int size = vsnprintf(buf, kBufferSize - 1, m_fmt, args); + + write(buf, size); } @@ -77,7 +86,6 @@ void FileLog::text(const char* fmt, va_list args) } - void FileLog::onWrite(uv_fs_t *req) { delete [] static_cast(req->data); diff --git a/src/common/log/FileLog.h b/src/common/log/FileLog.h index 545056bb..2c25f093 100644 --- a/src/common/log/FileLog.h +++ b/src/common/log/FileLog.h @@ -31,10 +31,15 @@ #include "interfaces/ILogBackend.h" +namespace xmrig { + class Controller; +} + + class FileLog : public ILogBackend { public: - FileLog(const char *fileName); + FileLog(xmrig::Controller *controller, const char *fileName); void message(Level level, const char* fmt, va_list args) override; void text(const char* fmt, va_list args) override; @@ -44,7 +49,9 @@ private: void write(char *data, size_t size); + char m_fmt[256]; int m_file; + xmrig::Controller *m_controller; }; #endif /* __FILELOG_H__ */ diff --git a/src/common/log/Log.cpp b/src/common/log/Log.cpp index 6144e4f1..763eb25b 100644 --- a/src/common/log/Log.cpp +++ b/src/common/log/Log.cpp @@ -37,11 +37,15 @@ Log *Log::m_self = nullptr; static const char *colors[5] = { - Log::kCL_RED, /* ERR */ - Log::kCL_YELLOW, /* WARNING */ - Log::kCL_WHITE, /* NOTICE */ - "", /* INFO */ - Log::kCL_GRAY /* DEBUG */ + "\x1B[0;31m", /* ERR */ + "\x1B[0;33m", /* WARNING */ + "\x1B[1;37m", /* NOTICE */ + "", /* INFO */ +# ifdef WIN32 + "\x1B[1;30m" /* DEBUG */ +# else + "\x1B[90m" /* DEBUG */ +# endif }; diff --git a/src/common/log/Log.h b/src/common/log/Log.h index 6d4959ef..c4803e3a 100644 --- a/src/common/log/Log.h +++ b/src/common/log/Log.h @@ -36,17 +36,6 @@ class Log { public: - constexpr static const char* kCL_N = "\x1B[0m"; - constexpr static const char* kCL_RED = "\x1B[31m"; - constexpr static const char* kCL_YELLOW = "\x1B[33m"; - constexpr static const char* kCL_WHITE = "\x1B[01;37m"; - -# ifdef WIN32 - constexpr static const char* kCL_GRAY = "\x1B[01;30m"; -# else - constexpr static const char* kCL_GRAY = "\x1B[90m"; -# endif - static inline Log* i() { assert(m_self != nullptr); return m_self; } static inline void add(ILogBackend *backend) { i()->m_backends.push_back(backend); } static inline void init() { if (!m_self) { new Log(); } } diff --git a/src/common/log/SysLog.cpp b/src/common/log/SysLog.cpp index 5eb4dcd4..bcb96394 100644 --- a/src/common/log/SysLog.cpp +++ b/src/common/log/SysLog.cpp @@ -37,11 +37,11 @@ SysLog::SysLog() void SysLog::message(Level level, const char *fmt, va_list args) { - vsyslog(level, fmt, args); + vsyslog(static_cast(level), fmt, args); } void SysLog::text(const char *fmt, va_list args) { - message(LOG_INFO, fmt, args); + vsyslog(LOG_INFO, fmt, args); } diff --git a/src/core/Controller.cpp b/src/core/Controller.cpp index b1e03f32..ac64f173 100644 --- a/src/core/Controller.cpp +++ b/src/core/Controller.cpp @@ -110,7 +110,7 @@ int xmrig::Controller::init(int argc, char **argv) } if (config()->logFile()) { - Log::add(new FileLog(config()->logFile())); + Log::add(new FileLog(this, config()->logFile())); } # ifdef HAVE_SYSLOG_H diff --git a/src/interfaces/ILogBackend.h b/src/interfaces/ILogBackend.h index b6db72a8..30554905 100644 --- a/src/interfaces/ILogBackend.h +++ b/src/interfaces/ILogBackend.h @@ -39,6 +39,8 @@ public: DEBUG }; + constexpr static const size_t kBufferSize = 512; + virtual ~ILogBackend() {} virtual void message(Level level, const char* fmt, va_list args) = 0;