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