84 lines
2.3 KiB
C++
84 lines
2.3 KiB
C++
|
|
#include "myshell.h"
|
|||
|
|
|
|||
|
|
namespace ai_matrix
|
|||
|
|
{
|
|||
|
|
const int TIME_SIZE = 32;
|
|||
|
|
const int TIME_DIFF = 28800; // 8 hour
|
|||
|
|
std::mutex MyShell::mutex;
|
|||
|
|
uint32_t MyShell::shellLevel = SHELL_LEVEL_INFO;
|
|||
|
|
std::vector<std::string> MyShell::levelString{"[Debug]", "[Info ]", "[Warn ]", "[Error]", "[Fatal]"};
|
|||
|
|
|
|||
|
|
MyShell::MyShell(std::string file, std::string function, int line, uint32_t level)
|
|||
|
|
: myLevel_(level), file_(file), function_(function), line_(line)
|
|||
|
|
{
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
MyShell::~MyShell()
|
|||
|
|
{
|
|||
|
|
if (myLevel_ >= shellLevel)
|
|||
|
|
{
|
|||
|
|
std::lock_guard<std::mutex> locker(mutex);
|
|||
|
|
// cout to screen
|
|||
|
|
std::cout << ss_.str() << std::endl;
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
std::ostringstream &MyShell::Stream()
|
|||
|
|
{
|
|||
|
|
if (myLevel_ >= shellLevel)
|
|||
|
|
{
|
|||
|
|
struct timeval time = {0, 0};
|
|||
|
|
gettimeofday(&time, nullptr);
|
|||
|
|
time_t timep = time.tv_sec + TIME_DIFF; //加上8小时
|
|||
|
|
struct tm *ptm = gmtime(&timep); //返回tm结构的格林尼治时间(GMT)
|
|||
|
|
char timeString[TIME_SIZE] = {0};
|
|||
|
|
//%F 年-月-日 %X 标准的时间串
|
|||
|
|
strftime(timeString, TIME_SIZE, "[%F %X:", ptm);
|
|||
|
|
long int usValue = time.tv_usec;
|
|||
|
|
|
|||
|
|
date_ = timeString;
|
|||
|
|
ss_.fill('0');
|
|||
|
|
ss_ << levelString[myLevel_] << timeString << std::setw(3) << usValue / 1000 << "]";
|
|||
|
|
|
|||
|
|
std::string fileName = file_.substr(file_.rfind('/') + 1);
|
|||
|
|
ss_ << "[" << fileName << " " << function_ << ":" << line_ << "] ";
|
|||
|
|
}
|
|||
|
|
return ss_;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void MyShell::ShellDebugOn()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_DEBUG;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
void MyShell::ShellInfoOn()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_INFO;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
void MyShell::ShellWarnOn()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_WARN;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
void MyShell::ShellErrorOn()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_ERROR;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
void MyShell::ShellFatalOn()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_FATAL;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
void MyShell::ShellAllOn()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_DEBUG;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
void MyShell::ShellAllOff()
|
|||
|
|
{
|
|||
|
|
shellLevel = SHELL_LEVEL_NONE;
|
|||
|
|
return;
|
|||
|
|
}
|
|||
|
|
} // namespace matrix_common
|