18 #include "precompiled.h"
38 #pragma warning(disable:4512)
39 #pragma warning(disable:4100)
42 #include <boost/algorithm/string/replace.hpp>
63 "<meta charset=\"utf-8\">\n"
64 "<title>Pyrogenesis Log</title>\n"
66 "body { background: #eee; color: black; font-family: sans-serif; } "
67 "p { background: white; margin: 3px 0 3px 0; } "
68 ".error { color: red; } "
69 ".warning { color: blue; }"
89 CLogger::CLogger(std::ostream* mainLog, std::ostream* interestingLog,
bool takeOwnership,
bool useDebugPrintf)
121 time_t t = time(NULL);
122 struct tm* now = localtime(&t);
123 char currentDate[17];
124 sprintf_s(currentDate,
ARRAY_SIZE(currentDate),
"%04d-%02d-%02d", 1900+now->tm_year, 1+now->tm_mon, now->tm_mday);
125 char currentTime[10];
126 sprintf_s(currentTime,
ARRAY_SIZE(currentTime),
"%02d:%02d:%02d", now->tm_hour, now->tm_min, now->tm_sec);
130 *
m_MainLog <<
"<p>Engine exited successfully on " << currentDate;
131 *
m_MainLog <<
" at " << currentTime << buffer <<
"</p>\n";
143 static std::string
ToHTML(
const wchar_t* message)
147 boost::algorithm::replace_all(cmessage,
"&",
"&");
148 boost::algorithm::replace_all(cmessage,
"<",
"<");
154 std::string cmessage =
ToHTML(message);
162 *
m_MainLog <<
"<p>" << cmessage <<
"</p>\n";
175 std::string cmessage =
ToHTML(message);
187 *
m_MainLog <<
"<p class=\"error\">ERROR: " << cmessage <<
"</p>\n";
195 std::string cmessage =
ToHTML(message);
204 *
m_InterestingLog <<
"<p class=\"warning\">WARNING: " << cmessage <<
"</p>\n";
207 *
m_MainLog <<
"<p class=\"warning\">WARNING: " << cmessage <<
"</p>\n";
283 CStrW font_name(L
"mono-stroke-10");
284 CFont font(font_name);
288 textTech->BeginPass();
291 textRenderer.
Font(font_name);
292 textRenderer.Color(1.0f, 1.0f, 1.0f);
295 textRenderer.Translate(4.0f, 35.0f + lineSpacing, 0.0f);
307 textRenderer.Color(0.0f, 0.8f, 0.0f);
309 else if (it->method ==
Warning)
312 textRenderer.Color(1.0f, 1.0f, 0.0f);
317 textRenderer.Color(1.0f, 0.0f, 0.0f);
320 CMatrix3D savedTransform = textRenderer.GetTransform();
322 textRenderer.PrintfAdvance(L
"[%8.3f] %ls: ", it->time, type);
324 textRenderer.Color(1.0f, 1.0f, 1.0f);
325 textRenderer.Put(0.0f, 0.0f, it->message.c_str());
327 textRenderer.SetTransform(savedTransform);
329 textRenderer.
Translate(0.0f, (
float)lineSpacing, 0.0f);
332 textRenderer.Render();
342 const wchar_t* pos = message;
344 while ((eol = wcschr(pos, L
'\n')) != NULL)
void Translate(float x, float y, float z)
Error/warning/message logging class.
static const size_t RENDER_LIMIT
void PushRenderMessage(ELogMethod method, const wchar_t *message)
void LogMessage(const wchar_t *fmt,...) WPRINTF_ARGS(2)
const OsPath & psLogDir()
std::string utf8_from_wstring(const std::wstring &src, Status *err)
opposite of wstring_from_utf8
void CleanupRenderQueue()
static void out(const wchar_t *fmt,...)
static const double RENDER_TIMEOUT
Locks a CMutex over this object's lifetime.
static const size_t BUFFER_SIZE
const char * html_header1
shared_ptr< CShaderTechnique > CShaderTechniquePtr
void LogError(const wchar_t *fmt,...) WPRINTF_ARGS(2)
BlackHoleStreamBuf blackHoleStreamBuf
std::deque< RenderedMessage > m_RenderMessages
int sprintf_s(char *buf, size_t max_chars, const char *fmt,...) PRINTF_ARGS(3)
int wcscpy_s(wchar_t *dst, size_t max_dst_chars, const wchar_t *src)
static std::string ToHTML(const wchar_t *message)
double m_RenderLastEraseTime
CLogger nullLogger & blackHoleStream
std::stringstream m_Stream
#define SAFE_DELETE(p)
delete memory ensuing from new and set the pointer to zero (thus making double-frees safe / a no-op) ...
void WriteError(const wchar_t *message)
i64 Status
Error handling system.
std::ostream * m_InterestingLog
void WriteWarning(const wchar_t *message)
std::wstring wstring_from_utf8(const std::string &src, Status *err)
convert UTF-8 to a wide string (UTF-16 or UCS-4, depending on the platform's wchar_t).
void LogMessageRender(const wchar_t *fmt,...) WPRINTF_ARGS(2)
void Font(const CStrW &font)
Set the font for subsequent print calls.
int sys_vswprintf(wchar_t *buffer, size_t count, const wchar_t *format, va_list argptr)
sys_vswprintf: doesn't quite follow the standard for vswprintf, but works better across compilers: ...
void WriteMessage(const wchar_t *message, bool doRender)
static const double RENDER_TIMEOUT_RATE
#define PROFILE3_GPU(name)
const char * html_header0
void InsertMessage(const wchar_t *szMessage,...) WPRINTF_ARGS(2)
void LogWarning(const wchar_t *fmt,...) WPRINTF_ARGS(2)
void debug_printf(const wchar_t *fmt,...)
write a formatted string to the debug channel, subject to filtering (see below).
static std::string OsString(const OsPath &path)