Implemented logging formatted string

This commit is contained in:
Eism 2022-05-06 16:55:56 +03:00
parent f7d42b6541
commit 429f1d518e
6 changed files with 51 additions and 24 deletions

View file

@ -52,20 +52,20 @@ void LogApi::debug(const QString& message)
void LogApi::error(const QString& tag, const QString& message)
{
LOGE_T(tag.toStdString()) << message;
LOGE_T(tag.toStdString())() << message;
}
void LogApi::warn(const QString& tag, const QString& message)
{
LOGW_T(tag.toStdString()) << message;
LOGW_T(tag.toStdString())() << message;
}
void LogApi::info(const QString& tag, const QString& message)
{
LOGI_T(tag.toStdString()) << message;
LOGI_T(tag.toStdString())() << message;
}
void LogApi::debug(const QString& tag, const QString& message)
{
LOGD_T(tag.toStdString()) << message;
LOGD_T(tag.toStdString())() << message;
}

View file

@ -33,7 +33,8 @@ void DrawObjectsLogger::beginObject(const std::string& name, const PointF& pageP
std::string gap;
gap.resize(m_objects.size());
#ifdef LOG_STREAM
LOG_STREAM(haw::logger::Logger::DEBG, DRAW_OBJ_TAG) << "Begin: " << gap << name << "{" << pagePos.x() << "," << pagePos.y() << "}";
LOG_STREAM(haw::logger::Logger::DEBG, DRAW_OBJ_TAG,
"")() << "Begin: " << gap << name << "{" << pagePos.x() << "," << pagePos.y() << "}";
#else
UNUSED(pagePos);
#endif
@ -48,7 +49,7 @@ void DrawObjectsLogger::endObject()
std::string gap;
gap.resize(m_objects.size());
#ifdef LOG_STREAM
LOG_STREAM(haw::logger::Logger::DEBG, DRAW_OBJ_TAG) << "End: " << gap << m_objects.top();
LOG_STREAM(haw::logger::Logger::DEBG, DRAW_OBJ_TAG, "")() << "End: " << gap << m_objects.top();
#endif
m_objects.pop();

View file

@ -113,8 +113,8 @@ void GlobalModule::onInit(const IApplication::RunMode& mode)
using namespace haw::profiler;
struct MyPrinter : public Profiler::Printer
{
void printDebug(const std::string& str) override { LOG_STREAM(Logger::DEBG, "Profiler") << str; }
void printInfo(const std::string& str) override { LOG_STREAM(Logger::INFO, "Profiler") << str; }
void printDebug(const std::string& str) override { LOG_STREAM(Logger::DEBG, "Profiler", "")() << str; }
void printInfo(const std::string& str) override { LOG_STREAM(Logger::INFO, "Profiler", "")() << str; }
};
Profiler::Options profOpt;

View file

@ -24,19 +24,19 @@
#define IF_LOGLEVEL(level) if (haw::logger::Logger::instance()->isLevel(level))
#define LOG_STREAM(type, tag) haw::logger::LogInput(type, tag).stream()
#define LOG(type, tag) LOG_STREAM(type, tag) << FUNCNAME(FUNC_INFO) << ": "
#define LOG_STREAM(type, tag, funcInfo) haw::logger::LogInput(type, tag, funcInfo).stream
#define LOG(type, tag) LOG_STREAM(type, tag, FUNCNAME(FUNC_INFO) + ": ")
#define LOGE_T(tag) IF_LOGLEVEL(haw::logger::Normal) LOG(haw::logger::Logger::ERRR, tag)
#define LOGW_T(tag) IF_LOGLEVEL(haw::logger::Normal) LOG(haw::logger::Logger::WARN, tag)
#define LOGI_T(tag) IF_LOGLEVEL(haw::logger::Normal) LOG(haw::logger::Logger::INFO, tag)
#define LOGD_T(tag) IF_LOGLEVEL(haw::logger::Debug) LOG(haw::logger::Logger::DEBG, tag)
#define LOGE() LOGE_T(LOG_TAG)
#define LOGW() LOGW_T(LOG_TAG)
#define LOGI() LOGI_T(LOG_TAG)
#define LOGD() LOGD_T(LOG_TAG)
#define LOGN() if (0) LOGD_T(LOG_TAG) // compiling, but no output
#define LOGE LOGE_T(LOG_TAG)
#define LOGW LOGW_T(LOG_TAG)
#define LOGI LOGI_T(LOG_TAG)
#define LOGD LOGD_T(LOG_TAG)
#define LOGN if (0) LOGD_T(LOG_TAG) // compiling, but no output
//! Helps
#define DEPRECATED LOGD() << "This function deprecated!!"

View file

@ -422,3 +422,33 @@ void Logger::setIsCatchQtMsg(bool arg)
}
#endif
LogInput::LogInput(const Type& type, const std::string& tag, const std::string& funcInfo)
: m_msg(type, tag), m_funcInfo(funcInfo)
{
}
LogInput::~LogInput()
{
m_msg.message = m_funcInfo + m_stream.str();
Logger::instance()->write(m_msg);
}
Stream& LogInput::stream()
{
return m_stream;
}
Stream& LogInput::stream(const char* msg, ...)
{
static const int BUFFER_SIZE = 2048;
va_list args;
va_start(args, msg);
char buffer[BUFFER_SIZE];
vsnprintf(buffer, BUFFER_SIZE, msg, args);
m_stream << buffer;
va_end(args);
return m_stream;
}

View file

@ -181,19 +181,15 @@ private:
class LogInput
{
public:
explicit LogInput(const Type& type, const std::string& tag)
: m_msg(type, tag) {}
explicit LogInput(const Type& type, const std::string& tag, const std::string& funcInfo);
~LogInput();
~LogInput()
{
m_msg.message = m_stream.str();
Logger::instance()->write(m_msg);
}
Stream& stream() { return m_stream; }
Stream& stream();
Stream& stream(const char* msg, ...);
private:
LogMsg m_msg;
std::string m_funcInfo;
Stream m_stream;
};
}