Monad Engine da02fba2
> Undercity Codex_
Loading...
Searching...
No Matches
Log.cpp
Go to the documentation of this file.
1#include "Log.h"
2
3#include <cstdio>
4
5namespace mnd
6{
7
8namespace
9{
10std::deque<LogEntry> g_entries;
11
12const char *LevelTag(LogLevel lv)
13{
14 switch (lv)
15 {
16 case LogLevel::Info: return "INFO";
17 case LogLevel::Warn: return "WARN";
18 case LogLevel::Error: return "ERROR";
19 case LogLevel::Fatal: return "FATAL";
20 }
21 return "?";
22}
23
24const char *LevelColor(LogLevel lv)
25{
26 switch (lv)
27 {
28 case LogLevel::Info: return kAnsiInfo;
29 case LogLevel::Warn: return kAnsiWarn;
30 case LogLevel::Error: return kAnsiError;
31 case LogLevel::Fatal: return kAnsiFatal;
32 }
33 return "";
34}
35} // namespace
36
37void LogEmit(LogLevel level, const char *file, int line, const char *fmt, ...)
38{
39 char msg[kLogMessageBufSize];
40 va_list ap;
41 va_start(ap, fmt);
42 std::vsnprintf(msg, sizeof(msg), fmt, ap);
43 va_end(ap);
44
45 const char *tag = LevelTag(level);
46 const char *color = LevelColor(level);
47 const char *fileTrim = shortFile(file);
48
49 FILE *stream = (level == LogLevel::Info) ? stdout : stderr;
50 std::fprintf(stream, "%s[%s] %s:%d: %s%s\n", color, tag, fileTrim, line, msg, kAnsiReset);
51
52 char full[kLogFullBufSize];
53 std::snprintf(full, sizeof(full), "[%s] %s:%d: %s", tag, fileTrim, line, msg);
54
55 g_entries.push_back({level, std::string(full)});
56 while (g_entries.size() > kMaxLogEntries)
57 {
58 g_entries.pop_front();
59 }
60}
61
62const std::deque<LogEntry> &LogGetEntries()
63{
64 return g_entries;
65}
66
68{
69 g_entries.clear();
70}
71
72} // namespace mnd
constexpr const char * kAnsiError
Definition Constants.h:39
constexpr const char * kAnsiWarn
Definition Constants.h:38
constexpr const char * kAnsiFatal
Definition Constants.h:40
constexpr const char * kAnsiInfo
Definition Constants.h:37
constexpr std::size_t kMaxLogEntries
Definition Constants.h:30
constexpr const char * kAnsiReset
Definition Constants.h:36
constexpr std::size_t kLogMessageBufSize
Definition Constants.h:31
constexpr std::size_t kLogFullBufSize
Definition Constants.h:32
Console logging macros for all engine and game code.
void LogClear()
Clear the in-memory log buffer.
Definition Log.cpp:67
const std::deque< LogEntry > & LogGetEntries()
Snapshot of the in-memory log buffer (bounded ring).
Definition Log.cpp:62
const char * shortFile(const char *file)
Definition Log.h:26
LogLevel
Definition Log.h:54
void LogEmit(LogLevel level, const char *file, int line, const char *fmt,...)
Emit a formatted log line to stdout/stderr and the ring buffer.
Definition Log.cpp:37