[deploy] update Logger
This commit is contained in:
parent
caaa86915d
commit
d6f949d502
|
|
@ -53,7 +53,7 @@ String LogFormater::GetLevelLabel(LogLevel level) const
|
||||||
class TextFormater : public LogFormater
|
class TextFormater : public LogFormater
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void Format(std::iostream& out, LogLevel level, Time time, std::streambuf* raw_msg) override
|
void FormatHeader(std::ostream& out, LogLevel level, Time time) override
|
||||||
{
|
{
|
||||||
// get timestamp
|
// get timestamp
|
||||||
time_t unix = std::time(nullptr);
|
time_t unix = std::time(nullptr);
|
||||||
|
|
@ -62,10 +62,10 @@ public:
|
||||||
|
|
||||||
// build message
|
// build message
|
||||||
out << GetLevelLabel(level) << std::put_time(&tmbuf, " %H:%M:%S ");
|
out << GetLevelLabel(level) << std::put_time(&tmbuf, " %H:%M:%S ");
|
||||||
|
}
|
||||||
|
|
||||||
if (raw_msg->sgetc() != std::char_traits<char>::eof())
|
void FormatFooter(std::ostream& out, LogLevel level, Time time) override
|
||||||
out << raw_msg;
|
{
|
||||||
|
|
||||||
out << "\n";
|
out << "\n";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -498,6 +498,7 @@ Logger::Logger()
|
||||||
: enabled_(true)
|
: enabled_(true)
|
||||||
, level_(LogLevel::Debug)
|
, level_(LogLevel::Debug)
|
||||||
, buffer_(1024)
|
, buffer_(1024)
|
||||||
|
, stream_(&buffer_)
|
||||||
{
|
{
|
||||||
LogFormaterPtr formater = new TextFormater;
|
LogFormaterPtr formater = new TextFormater;
|
||||||
SetFormater(formater);
|
SetFormater(formater);
|
||||||
|
|
@ -506,6 +507,23 @@ Logger::Logger()
|
||||||
AddProvider(provider);
|
AddProvider(provider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::iostream& Logger::GetFormatedStream(LogLevel level, LogBuffer* buffer)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
|
||||||
|
// reset buffer
|
||||||
|
buffer->Reset();
|
||||||
|
|
||||||
|
stream_.rdbuf(buffer);
|
||||||
|
stream_.clear();
|
||||||
|
|
||||||
|
if (formater_)
|
||||||
|
{
|
||||||
|
formater_->FormatHeader(stream_, level, Time::Now());
|
||||||
|
}
|
||||||
|
return stream_;
|
||||||
|
}
|
||||||
|
|
||||||
Logger::~Logger()
|
Logger::~Logger()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -518,17 +536,17 @@ void Logger::Logf(LogLevel level, const char* format, ...)
|
||||||
if (level < level_)
|
if (level < level_)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// build message
|
|
||||||
va_list args = nullptr;
|
va_list args = nullptr;
|
||||||
va_start(args, format);
|
va_start(args, format);
|
||||||
|
|
||||||
StringStream sstream;
|
// build message
|
||||||
sstream << strings::FormatArgs(format, args);
|
auto& stream = this->GetFormatedStream(level, &buffer_);
|
||||||
|
stream << strings::FormatArgs(format, args);
|
||||||
|
|
||||||
va_end(args);
|
va_end(args);
|
||||||
|
|
||||||
// write message
|
// write message
|
||||||
Write(level, sstream.rdbuf());
|
WriteToProviders(level, &buffer_);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::Flush()
|
void Logger::Flush()
|
||||||
|
|
@ -566,29 +584,21 @@ void Logger::ResizeBuffer(size_t buffer_size)
|
||||||
buffer_.Resize(buffer_size);
|
buffer_.Resize(buffer_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Logger::Write(LogLevel level, std::streambuf* raw_msg)
|
void Logger::WriteToProviders(LogLevel level, LogBuffer* buffer)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock(mutex_);
|
std::lock_guard<std::mutex> lock(mutex_);
|
||||||
|
|
||||||
// reset buffer
|
// format footer
|
||||||
buffer_.Reset();
|
|
||||||
|
|
||||||
// format message
|
|
||||||
std::iostream stream(&buffer_);
|
|
||||||
if (formater_)
|
if (formater_)
|
||||||
{
|
{
|
||||||
formater_->Format(stream, level, Time::Now(), raw_msg);
|
formater_->FormatFooter(stream_, level, Time::Now());
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
stream << raw_msg << "\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// write message
|
// write message
|
||||||
for (auto provider : providers_)
|
for (auto provider : providers_)
|
||||||
{
|
{
|
||||||
buffer_.pubseekpos(0, std::ios_base::in);
|
buffer->pubseekpos(0, std::ios_base::in);
|
||||||
provider->Write(level, &buffer_);
|
provider->Write(level, buffer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,9 @@ enum class LogLevel
|
||||||
class KGE_API LogFormater : public ObjectBase
|
class KGE_API LogFormater : public ObjectBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void Format(std::iostream& out, LogLevel level, Time time, std::streambuf* raw_msg) = 0;
|
virtual void FormatHeader(std::ostream& out, LogLevel level, Time time) = 0;
|
||||||
|
|
||||||
|
virtual void FormatFooter(std::ostream& out, LogLevel level, Time time) = 0;
|
||||||
|
|
||||||
String GetLevelLabel(LogLevel level) const;
|
String GetLevelLabel(LogLevel level) const;
|
||||||
};
|
};
|
||||||
|
|
@ -270,12 +272,6 @@ public:
|
||||||
/// @param buffer_size 缓冲区大小
|
/// @param buffer_size 缓冲区大小
|
||||||
void ResizeBuffer(size_t buffer_size);
|
void ResizeBuffer(size_t buffer_size);
|
||||||
|
|
||||||
/// \~chinese
|
|
||||||
/// @brief 写入缓冲区
|
|
||||||
/// @param level 日志等级
|
|
||||||
/// @param raw_msg 日志内容
|
|
||||||
void Write(LogLevel level, std::streambuf* raw_msg);
|
|
||||||
|
|
||||||
/// \~chinese
|
/// \~chinese
|
||||||
/// @brief 显示或关闭控制台
|
/// @brief 显示或关闭控制台
|
||||||
void ShowConsole(bool show);
|
void ShowConsole(bool show);
|
||||||
|
|
@ -285,11 +281,16 @@ public:
|
||||||
private:
|
private:
|
||||||
Logger();
|
Logger();
|
||||||
|
|
||||||
|
std::iostream& GetFormatedStream(LogLevel level, LogBuffer* buffer);
|
||||||
|
|
||||||
|
void WriteToProviders(LogLevel level, LogBuffer* buffer);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool enabled_;
|
bool enabled_;
|
||||||
LogLevel level_;
|
LogLevel level_;
|
||||||
LogFormaterPtr formater_;
|
LogFormaterPtr formater_;
|
||||||
LogBuffer buffer_;
|
LogBuffer buffer_;
|
||||||
|
std::iostream stream_;
|
||||||
Vector<LogProviderPtr> providers_;
|
Vector<LogProviderPtr> providers_;
|
||||||
std::mutex mutex_;
|
std::mutex mutex_;
|
||||||
};
|
};
|
||||||
|
|
@ -319,11 +320,11 @@ inline void Logger::Log(LogLevel level, _Args&&... args)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// build message
|
// build message
|
||||||
StringStream sstream;
|
auto& stream = this->GetFormatedStream(level, &this->buffer_);
|
||||||
(void)std::initializer_list<int>{ ((sstream << ' ' << args), 0)... };
|
(void)std::initializer_list<int>{ ((stream << ' ' << args), 0)... };
|
||||||
|
|
||||||
// write message
|
// write message
|
||||||
this->Write(level, sstream.rdbuf());
|
this->WriteToProviders(level, &this->buffer_);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace kiwano
|
} // namespace kiwano
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue