update Logger
This commit is contained in:
parent
9c86673ef0
commit
f7cc01d294
|
|
@ -110,7 +110,7 @@ namespace easy2d
|
||||||
E2D_LOG(L"-------------------------- All Objects --------------------------");
|
E2D_LOG(L"-------------------------- All Objects --------------------------");
|
||||||
for (const auto object : tracing_objects)
|
for (const auto object : tracing_objects)
|
||||||
{
|
{
|
||||||
E2D_LOG(object->DumpObject().c_str());
|
E2D_LOG(L"%s", object->DumpObject().c_str());
|
||||||
}
|
}
|
||||||
E2D_LOG(L"------------------------- Total size: %d -------------------------", tracing_objects.size());
|
E2D_LOG(L"------------------------- Total size: %d -------------------------", tracing_objects.size());
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -113,4 +113,92 @@ namespace easy2d
|
||||||
return error_stream_.rdbuf(buf);
|
return error_stream_.rdbuf(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Logger::Printf(const wchar_t* format, ...)
|
||||||
|
{
|
||||||
|
va_list args = nullptr;
|
||||||
|
va_start(args, format);
|
||||||
|
|
||||||
|
Outputf(output_stream_, Logger::DefaultOutputColor, nullptr, format, args);
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logger::Messagef(const wchar_t* format, ...)
|
||||||
|
{
|
||||||
|
using namespace __console_colors;
|
||||||
|
|
||||||
|
va_list args = nullptr;
|
||||||
|
va_start(args, format);
|
||||||
|
|
||||||
|
Outputf(output_stream_, stdout_blue, nullptr, format, args);
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logger::Warningf(const wchar_t* format, ...)
|
||||||
|
{
|
||||||
|
using namespace __console_colors;
|
||||||
|
|
||||||
|
va_list args = nullptr;
|
||||||
|
va_start(args, format);
|
||||||
|
|
||||||
|
Outputf(output_stream_, stdout_yellow_bg, L" Warning:", format, args);
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logger::Errorf(const wchar_t* format, ...)
|
||||||
|
{
|
||||||
|
using namespace __console_colors;
|
||||||
|
|
||||||
|
va_list args = nullptr;
|
||||||
|
va_start(args, format);
|
||||||
|
|
||||||
|
Outputf(error_stream_, stderr_red_bg, L" Error:", format, args);
|
||||||
|
|
||||||
|
va_end(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Logger::Outputf(std::wostream& os, std::wostream& (*color)(std::wostream&), const wchar_t* prompt, const wchar_t* format, va_list args) const
|
||||||
|
{
|
||||||
|
if (enabled_ && has_console_)
|
||||||
|
{
|
||||||
|
std::wstring output = MakeOutputString(prompt, format, args);
|
||||||
|
|
||||||
|
os << color << output;
|
||||||
|
::OutputDebugStringW(output.c_str());
|
||||||
|
|
||||||
|
ResetConsoleColor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wstring Logger::MakeOutputStringf(const wchar_t* prompt, const wchar_t* format, va_list args) const
|
||||||
|
{
|
||||||
|
static wchar_t temp_buffer[1024 * 3 + 1];
|
||||||
|
|
||||||
|
std::wstringstream ss;
|
||||||
|
ss << Logger::OutPrefix;
|
||||||
|
|
||||||
|
if (prompt)
|
||||||
|
ss << prompt;
|
||||||
|
|
||||||
|
if (format)
|
||||||
|
{
|
||||||
|
const auto len = ::_vscwprintf(format, args) + 1;
|
||||||
|
::_vsnwprintf_s(temp_buffer, len, len, format, args);
|
||||||
|
|
||||||
|
ss << ' ' << temp_buffer;
|
||||||
|
}
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::wostream& Logger::OutPrefix(std::wostream& out)
|
||||||
|
{
|
||||||
|
std::time_t unix = std::time(nullptr);
|
||||||
|
std::tm tmbuf;
|
||||||
|
localtime_s(&tmbuf, &unix);
|
||||||
|
out << std::put_time(&tmbuf, L"[easy2d] %H:%M:%S");
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,18 +27,18 @@
|
||||||
|
|
||||||
#ifndef E2D_LOG
|
#ifndef E2D_LOG
|
||||||
# ifdef E2D_DEBUG
|
# ifdef E2D_DEBUG
|
||||||
# define E2D_LOG(FORMAT, ...) easy2d::Logger::Instance().Messageln((FORMAT), __VA_ARGS__)
|
# define E2D_LOG(FORMAT, ...) easy2d::Logger::Instance().Messagef((FORMAT ## "\n"), __VA_ARGS__)
|
||||||
# else
|
# else
|
||||||
# define E2D_LOG __noop
|
# define E2D_LOG __noop
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef E2D_WARNING_LOG
|
#ifndef E2D_WARNING_LOG
|
||||||
# define E2D_WARNING_LOG(FORMAT, ...) easy2d::Logger::Instance().Warningln((FORMAT), __VA_ARGS__)
|
# define E2D_WARNING_LOG(FORMAT, ...) easy2d::Logger::Instance().Warningf((FORMAT ## "\n"), __VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef E2D_ERROR_LOG
|
#ifndef E2D_ERROR_LOG
|
||||||
# define E2D_ERROR_LOG(FORMAT, ...) easy2d::Logger::Instance().Errorln((FORMAT), __VA_ARGS__)
|
# define E2D_ERROR_LOG(FORMAT, ...) easy2d::Logger::Instance().Errorf((FORMAT ## "\n"), __VA_ARGS__)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
|
|
@ -53,29 +53,37 @@ namespace easy2d
|
||||||
|
|
||||||
void Disable();
|
void Disable();
|
||||||
|
|
||||||
template <typename ..._Args>
|
void Printf(const wchar_t* format, ...);
|
||||||
void Print(const wchar_t* format, _Args&&... args);
|
|
||||||
|
void Messagef(const wchar_t * format, ...);
|
||||||
|
|
||||||
|
void Warningf(const wchar_t* format, ...);
|
||||||
|
|
||||||
|
void Errorf(const wchar_t* format, ...);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Println(const wchar_t* format, _Args&&... args);
|
void Print(_Args&& ... args);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Message(const wchar_t * format, _Args&&... args);
|
void Println(_Args&& ... args);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Messageln(const wchar_t * format, _Args&&... args);
|
void Message(_Args&& ... args);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Warning(const wchar_t* format, _Args&&... args);
|
void Messageln(_Args&& ... args);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Warningln(const wchar_t* format, _Args&&... args);
|
void Warning(_Args&& ... args);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Error(const wchar_t* format, _Args&&... args);
|
void Warningln(_Args&& ... args);
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Errorln(const wchar_t* format, _Args&&... args);
|
void Error(_Args&& ... args);
|
||||||
|
|
||||||
|
template <typename ..._Args>
|
||||||
|
void Errorln(_Args&& ... args);
|
||||||
|
|
||||||
std::wstreambuf* RedirectOutputStreamBuffer(std::wstreambuf* buf);
|
std::wstreambuf* RedirectOutputStreamBuffer(std::wstreambuf* buf);
|
||||||
|
|
||||||
|
|
@ -86,14 +94,18 @@ namespace easy2d
|
||||||
private:
|
private:
|
||||||
Logger();
|
Logger();
|
||||||
|
|
||||||
template <typename ..._Args>
|
void Outputf(std::wostream& os, std::wostream&(*color)(std::wostream&), const wchar_t* prompt, const wchar_t* format, va_list args) const;
|
||||||
void OutputLine(std::wostream& os, std::wostream&(*color)(std::wostream&), const wchar_t* prompt, const wchar_t* format, _Args&&... args) const;
|
|
||||||
|
std::wstring MakeOutputStringf(const wchar_t* prompt, const wchar_t* format, va_list args) const;
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
void Output(std::wostream& os, std::wostream&(*color)(std::wostream&), const wchar_t* prompt, const wchar_t* format, _Args&&... args) const;
|
void OutputLine(std::wostream& os, std::wostream& (*color)(std::wostream&), const wchar_t* prompt, _Args&& ... args) const;
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
std::wstring MakeOutputString(const wchar_t* prompt, const wchar_t* format, _Args&&... args) const;
|
void Output(std::wostream& os, std::wostream& (*color)(std::wostream&), const wchar_t* prompt, _Args&& ... args) const;
|
||||||
|
|
||||||
|
template <typename ..._Args>
|
||||||
|
std::wstring MakeOutputString(const wchar_t* prompt, _Args&& ... args) const;
|
||||||
|
|
||||||
void ResetConsoleColor() const;
|
void ResetConsoleColor() const;
|
||||||
|
|
||||||
|
|
@ -155,65 +167,65 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Print(const wchar_t* format, _Args&&... args)
|
inline void Logger::Print(_Args&& ... args)
|
||||||
{
|
{
|
||||||
Output(output_stream_, Logger::DefaultOutputColor, nullptr, format, std::forward<_Args>(args)...);
|
Output(output_stream_, Logger::DefaultOutputColor, nullptr, std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Println(const wchar_t* format, _Args&&... args)
|
inline void Logger::Println(_Args&& ... args)
|
||||||
{
|
{
|
||||||
OutputLine(output_stream_, Logger::DefaultOutputColor, nullptr, format, std::forward<_Args>(args)...);
|
OutputLine(output_stream_, Logger::DefaultOutputColor, nullptr, std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Message(const wchar_t * format, _Args&&... args)
|
inline void Logger::Message(_Args&& ... args)
|
||||||
{
|
{
|
||||||
using namespace __console_colors;
|
using namespace __console_colors;
|
||||||
Output(output_stream_, stdout_blue, nullptr, format, std::forward<_Args>(args)...);
|
Output(output_stream_, stdout_blue, nullptr, std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Messageln(const wchar_t * format, _Args&&... args)
|
inline void Logger::Messageln(_Args&& ... args)
|
||||||
{
|
{
|
||||||
using namespace __console_colors;
|
using namespace __console_colors;
|
||||||
OutputLine(output_stream_, stdout_blue, nullptr, format, std::forward<_Args>(args)...);
|
OutputLine(output_stream_, stdout_blue, nullptr, std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Warning(const wchar_t* format, _Args&&... args)
|
inline void Logger::Warning(_Args&& ... args)
|
||||||
{
|
{
|
||||||
using namespace __console_colors;
|
using namespace __console_colors;
|
||||||
Output(output_stream_, stdout_yellow_bg, L"Warning: ", format, std::forward<_Args>(args)...);
|
Output(output_stream_, stdout_yellow_bg, L"Warning:", std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Warningln(const wchar_t* format, _Args&&... args)
|
inline void Logger::Warningln(_Args&& ... args)
|
||||||
{
|
{
|
||||||
using namespace __console_colors;
|
using namespace __console_colors;
|
||||||
OutputLine(output_stream_, stdout_yellow_bg, L"Warning: ", format, std::forward<_Args>(args)...);
|
OutputLine(output_stream_, stdout_yellow_bg, L"Warning:", std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Error(const wchar_t* format, _Args&&... args)
|
inline void Logger::Error(_Args&& ... args)
|
||||||
{
|
{
|
||||||
using namespace __console_colors;
|
using namespace __console_colors;
|
||||||
Output(error_stream_, stderr_red_bg, L"Error: ", format, std::forward<_Args>(args)...);
|
Output(error_stream_, stderr_red_bg, L"Error:", std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Errorln(const wchar_t* format, _Args&&... args)
|
inline void Logger::Errorln(_Args&& ... args)
|
||||||
{
|
{
|
||||||
using namespace __console_colors;
|
using namespace __console_colors;
|
||||||
OutputLine(error_stream_, stderr_red_bg, L"Error: ", format, std::forward<_Args>(args)...);
|
OutputLine(error_stream_, stderr_red_bg, L"Error:", std::forward<_Args>(args)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::OutputLine(std::wostream& os, std::wostream&(*color)(std::wostream&), const wchar_t* prompt, const wchar_t* format, _Args&&... args) const
|
void Logger::OutputLine(std::wostream& os, std::wostream& (*color)(std::wostream&), const wchar_t* prompt, _Args&& ... args) const
|
||||||
{
|
{
|
||||||
if (enabled_ && has_console_)
|
if (enabled_ && has_console_)
|
||||||
{
|
{
|
||||||
Output(os, color, prompt, format, std::forward<_Args>(args)...);
|
Output(os, color, prompt, std::forward<_Args>(args)...);
|
||||||
|
|
||||||
os << std::endl;
|
os << std::endl;
|
||||||
::OutputDebugStringW(L"\r\n");
|
::OutputDebugStringW(L"\r\n");
|
||||||
|
|
@ -221,11 +233,11 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline void Logger::Output(std::wostream& os, std::wostream&(*color)(std::wostream&), const wchar_t* prompt, const wchar_t* format, _Args&&... args) const
|
void Logger::Output(std::wostream& os, std::wostream& (*color)(std::wostream&), const wchar_t* prompt, _Args&& ... args) const
|
||||||
{
|
{
|
||||||
if (enabled_ && has_console_)
|
if (enabled_ && has_console_)
|
||||||
{
|
{
|
||||||
std::wstring output = MakeOutputString(prompt, format, std::forward<_Args>(args)...);
|
std::wstring output = MakeOutputString(prompt, std::forward<_Args>(args)...);
|
||||||
|
|
||||||
os << color << output;
|
os << color << output;
|
||||||
::OutputDebugStringW(output.c_str());
|
::OutputDebugStringW(output.c_str());
|
||||||
|
|
@ -235,20 +247,15 @@ namespace easy2d
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename ..._Args>
|
template <typename ..._Args>
|
||||||
inline std::wstring Logger::MakeOutputString(const wchar_t* prompt, const wchar_t* format, _Args&&... args) const
|
std::wstring Logger::MakeOutputString(const wchar_t* prompt, _Args&& ... args) const
|
||||||
{
|
{
|
||||||
static wchar_t temp_buffer[1024 * 3 + 1];
|
|
||||||
|
|
||||||
const auto len = ::_scwprintf(format, std::forward<_Args>(args)...);
|
|
||||||
::swprintf_s(temp_buffer, len + 1, format, std::forward<_Args>(args)...);
|
|
||||||
|
|
||||||
std::wstringstream ss;
|
std::wstringstream ss;
|
||||||
ss << Logger::OutPrefix;
|
ss << Logger::OutPrefix;
|
||||||
|
|
||||||
if (prompt)
|
if (prompt)
|
||||||
ss << prompt;
|
ss << prompt;
|
||||||
|
|
||||||
ss << temp_buffer;
|
(void)std::initializer_list<int>{((ss << ' ' << args), 0)...};
|
||||||
|
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
@ -264,15 +271,6 @@ namespace easy2d
|
||||||
::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), Logger::Instance().default_stdout_color_);
|
::SetConsoleTextAttribute(::GetStdHandle(STD_OUTPUT_HANDLE), Logger::Instance().default_stdout_color_);
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline std::wostream& Logger::OutPrefix(std::wostream& out)
|
|
||||||
{
|
|
||||||
std::time_t unix = std::time(nullptr);
|
|
||||||
std::tm tmbuf;
|
|
||||||
localtime_s(&tmbuf, &unix);
|
|
||||||
out << std::put_time(&tmbuf, L"[easy2d] %H:%M:%S ");
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace easy2d
|
namespace easy2d
|
||||||
|
|
|
||||||
|
|
@ -70,6 +70,12 @@ namespace easy2d
|
||||||
{
|
{
|
||||||
return std::bind(_Func, _Ptr, std::_Ph<_Num + 1>()...);
|
return std::bind(_Func, _Ptr, std::_Ph<_Num + 1>()...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<int... _Num>
|
||||||
|
static inline std::function<_Ret(_Args...)> MakeFunc(_Ty* _Ptr, _Ret(_Ty::* _Func)(_Args...) const, Seq<_Num...>)
|
||||||
|
{
|
||||||
|
return std::bind(_Func, _Ptr, std::_Ph<_Num + 1>()...);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -80,4 +86,12 @@ namespace easy2d
|
||||||
return ClosureHelper<_Ty, _Ret, _Args...>::
|
return ClosureHelper<_Ty, _Ret, _Args...>::
|
||||||
MakeFunc(_Ptr, _Func, typename Gen<_Args...>::SeqType{});
|
MakeFunc(_Ptr, _Func, typename Gen<_Args...>::SeqType{});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename _Ty, typename _Ret, typename... _Args>
|
||||||
|
inline std::function<_Ret(_Args...)> Closure(_Ty* _Ptr, _Ret(_Ty::*_Func)(_Args...) const)
|
||||||
|
{
|
||||||
|
using namespace __closure__detail;
|
||||||
|
return ClosureHelper<_Ty, _Ret, _Args...>::
|
||||||
|
MakeFunc(_Ptr, _Func, typename Gen<_Args...>::SeqType{});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue