hunting/utils/Log/src/Log.cpp
2023-07-20 08:18:17 -07:00

109 lines
2.5 KiB
C++

#include "Log.h"
#include "ILog.h"
#include "LogImpl.h"
#include "ILogMakePtr.h"
#include <stdarg.h>
#include <stdio.h>
#include <iostream>
#include <memory>
#include <string.h>
int InitLog(const int logInstanceType, const LogSetting *setting)
{
switch (logInstanceType)
{
case LOG_SERIAL_PRINT:
{
std::shared_ptr<ILog> logImpl = ILogMakePtr::GetInstance()->MakeLogImplPtr();
ILog::GetInstance(&logImpl);
break;
}
case LOG_EASYLOGGING:
{
std::shared_ptr<ILog> logImpl = ILogMakePtr::GetInstance()->MakeLogEasylogging(setting);
ILog::GetInstance(&logImpl);
break;
}
case LOG_CAPTURE_LOG:
{
std::shared_ptr<ILog> logImpl = ILogMakePtr::GetInstance()->MakeLongCapture(setting);
ILog::GetInstance(&logImpl);
break;
}
default:
{
LogError("Log module init error.\n");
return -1;
}
}
return 0;
}
int UnInitLog()
{
std::shared_ptr<ILog> logImpl = std::make_shared<ILog>();
ILog::GetInstance(&logImpl);
return 0;
}
// static void LogTypeToString(const int type)
// {
// switch (type)
// {
// case LOG_TYPE_ERROR:
// {
// ILog::GetInstance()->Log("[ ERROR ]");
// break;
// }
// case LOG_TYPE_TEST_TIPS:
// {
// ILog::GetInstance()->Log("[ FAILURE ]");
// break;
// }
// default:
// break;
// }
// }
int Log(const char *function, int line, int type, const char *format, ...)
{
if (!ILog::GetInstance()->IsWorking())
{
return -1;
}
// TODO:
// LogTypeToString(type);
constexpr int SEND_TRACE_BUFF_SIZE = 2048;
char buff[SEND_TRACE_BUFF_SIZE] = {0};
snprintf(buff, SEND_TRACE_BUFF_SIZE, "[%s][line:%d]:", function, line);
// ILog::GetInstance()->Log(buff);
const int headLen = strlen(buff);
va_list vargs;
va_start(vargs, format);
int len = vsnprintf(buff + headLen, SEND_TRACE_BUFF_SIZE - headLen, format, vargs);
va_end(vargs);
switch (type)
{
case LOG_TYPE_INFORMATION:
ILog::GetInstance()->InFo(buff);
break;
case LOG_TYPE_WARNING:
ILog::GetInstance()->Warning(buff);
break;
case LOG_TYPE_ERROR:
ILog::GetInstance()->Error(buff);
break;
case LOG_TYPE_DEBUG:
ILog::GetInstance()->Debug(buff);
break;
case LOG_TYPE_TRACE:
ILog::GetInstance()->Trace(buff);
break;
default:
break;
}
return len;
}