From aca962d7ce3d404671cace2a82b04ff937375009 Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 29 Oct 2018 08:27:51 +0800 Subject: =?UTF-8?q?*=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/libjin/Utils/je_log.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 80 insertions(+), 1 deletion(-) (limited to 'src/libjin/Utils/je_log.cpp') diff --git a/src/libjin/Utils/je_log.cpp b/src/libjin/Utils/je_log.cpp index 2bcb25a..1704ce3 100644 --- a/src/libjin/Utils/je_log.cpp +++ b/src/libjin/Utils/je_log.cpp @@ -1,2 +1,81 @@ #define LOGHELPER_IMPLEMENT -#include "je_log.h" \ No newline at end of file +#include "je_log.h" + +#define hasbit(flag, bit) ((flag & bit) == bit) + +unsigned int Loghelper::dir = Loghelper::Direction::DIR_CERR; +unsigned int Loghelper::levels = Loghelper::Level::LV_ALL; +std::ofstream Loghelper::fs; + +void Loghelper::log(Level _level, const char* _fmt, ...) +{ + if (!hasbit(levels, _level)) + return; +#define FORMAT_MSG_BUFFER_SIZE (204800) + const char* levelStr = nullptr; + switch (_level) + { + case LV_ERROR: + levelStr = "[Jin internal error]: "; + break; + case LV_WARNING: + levelStr = "[Jin internal warning]: "; + break; + case LV_INFO: + levelStr = "[Jin internal info]: "; + break; + case LV_DEBUG: + levelStr = "[Jin internal debug]: "; + break; + default: + levelStr = "[Jin internal unknow]: "; + break; + } + char buffer[FORMAT_MSG_BUFFER_SIZE + 1] = { 0 }; + strcpy(buffer, levelStr); + va_list args; + va_start(args, _fmt); + vsnprintf(buffer + strlen(buffer), FORMAT_MSG_BUFFER_SIZE, _fmt, args); + va_end(args); + if (hasbit(dir, DIR_CERR)) + { + std::cerr << buffer << std::endl; + } + if (hasbit(dir, DIR_FILE)) + { + fs << buffer << std::endl; + } +#undef FORMAT_MSG_BUFFER_SIZE +} + +// 重定向 +void Loghelper::redirect(unsigned int _dir, char* _path) +{ + dir = _dir; + if (hasbit(dir, DIR_FILE)) + { + try + { + fs.open(_path, std::ios_base::app); + } + catch (std::ios_base::failure& e) { + dir = DIR_CERR; + log(Level::LV_WARNING, "重定向log路径 %s 失败", _path); + } + } +} + +// 筛选错误等级 +void Loghelper::restrict(unsigned int _levels) +{ + levels = _levels; +} + +void Loghelper::close() +{ + if (!fs.fail()) + fs.close(); + fs.clear(); +} + +#undef hasbit -- cgit v1.1-26-g67d0