VAE - Virtual Audio Engine 1
Small Data Driven Audio Engine
vae_logger.hpp
Go to the documentation of this file.
1#ifndef _VAE_LOGGER
2#define _VAE_LOGGER
3
4#include "../../include/vae/vae.hpp"
5
6void vae_print(vae::LogLevel level, const char* message);
7
8#ifdef VAE_NO_LOG
9 VAE_DEBUG(msg, ...)
10 VAE_INFO(msg, ...)
11 VAE_WARN(msg, ...)
12 VAE_ERROR(msg, ...)
13 VAE_DEBUG_EVENT(msg, ...)
14 VAE_DEBUG_VOICES(msg, ...)
15#else
16 #ifndef VAE_NO_STDIO
17 #include <stdio.h>
18 void vae_print(vae::LogLevel level, const char* message) {
19 printf(message);
20 printf("\n");
21 }
22 #endif
23 #include "../wrapped/vae_profiler.hpp"
24 #include <stdarg.h>
25 #include <cstring>
26
27 // TODO this might cause redefinition errors
28 #define STB_SPRINTF_IMPLEMENTATION
29 #include "../../external/headeronly/stb_sprintf.h"
30
31 void vae_print_va(vae::LogLevel level, const char* format, va_list va) {
32 constexpr int bufferSize = 1024;
33 static bool locked = false;
34 static char buffer[bufferSize];
35 while(locked) { }
36 locked = true;
37 const int length = stbsp_vsnprintf(buffer, bufferSize, format, va);
38 buffer[bufferSize - 1] = '\0';
39 vae_print(level, buffer);
40 VAE_PROFILER_MESSAGE(buffer, length)
41 locked = false;
42 }
43
44 void vae_print_path(vae::LogLevel level, const char* path, int line, const char* format, ...) {
45 if (path == nullptr) { return; }
46 if (format == nullptr) { return; }
47
48 constexpr int bufferSize = 1024;
49 constexpr int fixedPathLength = 16;
50 static bool locked = false;
51 static char buffer[bufferSize];
52
53 // Make all paths the same length so log is less messy
54 int pathLength = strlen(path);
55 if (fixedPathLength < pathLength) {
56 path += (pathLength - fixedPathLength);
57 }
58
59 while(locked) { }
60 locked = true;
61
62 switch (level) {
63 case vae::LogLevel::Debug: stbsp_snprintf(buffer, bufferSize, "DEBUG | %s:%i \t| %s", path, line, format); break;
64 case vae::LogLevel::Info: stbsp_snprintf(buffer, bufferSize, " INFO | %s:%i \t| %s", path, line, format); break;
65 case vae::LogLevel::Warn: stbsp_snprintf(buffer, bufferSize, " WARN | %s:%i \t| %s", path, line, format); break;
66 case vae::LogLevel::Error: stbsp_snprintf(buffer, bufferSize, "ERROR | %s:%i \t| %s", path, line, format); break;
67 case vae::LogLevel::Ciritical: stbsp_snprintf(buffer, bufferSize, " CRIT | %s:%i \t| %s", path, line, format); break;
68 default: break;
69 }
70
71 va_list va;
72 va_start(va, format);
73 vae_print_va(level, buffer, va);
74 va_end(va);
75
76 locked = false;
77 }
78
79 // As long as logging is enabled, error will be printed
80 #define VAE_ERROR(msg, ...) vae_print_path(vae::LogLevel::Error, __FILE__, __LINE__, msg, ## __VA_ARGS__);
81
82 #if !defined(VAE_RELEASE) || defined(VAE_FORCE_LOG)
83 #define VAE_DEBUG(msg, ...) vae_print_path(vae::LogLevel::Debug, __FILE__, __LINE__, msg, ## __VA_ARGS__);
84 #define VAE_INFO(msg, ...) vae_print_path(vae::LogLevel::Info, __FILE__, __LINE__, msg, ## __VA_ARGS__);
85 #define VAE_WARN(msg, ...) vae_print_path(vae::LogLevel::Warn, __FILE__, __LINE__, msg, ## __VA_ARGS__);
86
87 #ifdef VAE_LOG_VOICES
88 #define VAE_DEBUG_VOICES(msg, ...) vae_print_path(vae::LogLevel::Debug, __FILE__, __LINE__, msg, ## __VA_ARGS__);
89 #else
90 #define VAE_DEBUG_VOICES(msg, ...)
91 #endif // VAE_LOG_VOICES
92
93 #ifdef VAE_LOG_EVENTS
94 #define VAE_DEBUG_EVENT(msg, ...) vae_print_path(vae::LogLevel::Debug, __FILE__, __LINE__, msg, ## __VA_ARGS__);
95 #else
96 #define VAE_DEBUG_EVENT(msg, ...)
97 #endif // VAE_LOG_EVENTS
98 #else
99 #define VAE_DEBUG(msg, ...)
100 #define VAE_INFO(msg, ...)
101 #define VAE_WARN(msg, ...)
102 #define VAE_DEBUG_EVENT(msg, ...)
103 #define VAE_DEBUG_VOICES(msg, ...)
104 #endif // _NDEBUG
105
106#endif
107
108#endif // _VAE_LOGGER
LogLevel
Definition: vae.hpp:91
#define VAE_ERROR(msg,...)
Definition: vae_logger.hpp:80
#define VAE_WARN(msg,...)
Definition: vae_logger.hpp:85
#define VAE_INFO(msg,...)
Definition: vae_logger.hpp:84
void vae_print_path(vae::LogLevel level, const char *path, int line, const char *format,...)
Definition: vae_logger.hpp:44
#define VAE_DEBUG_EVENT(msg,...)
Definition: vae_logger.hpp:96
#define VAE_DEBUG(msg,...)
Definition: vae_logger.hpp:83
#define VAE_DEBUG_VOICES(msg,...)
Definition: vae_logger.hpp:90
void vae_print_va(vae::LogLevel level, const char *format, va_list va)
Definition: vae_logger.hpp:31
void vae_print(vae::LogLevel level, const char *message)
Definition: vae_logger.hpp:18
#define VAE_PROFILER_MESSAGE(msg, size)
Send dynamic string message.