summaryrefslogtreecommitdiff
path: root/core/logger.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/logger.c')
-rw-r--r--core/logger.c69
1 files changed, 54 insertions, 15 deletions
diff --git a/core/logger.c b/core/logger.c
index 47182ce..015b84f 100644
--- a/core/logger.c
+++ b/core/logger.c
@@ -5,6 +5,7 @@
// index:
// [section] includes
// [section] macros
+// [section] extern globals
// [section] definitions
// ----------------------------------------------------------------------------
@@ -21,8 +22,6 @@
// ----------------------------------------------------------------------------
// [section] macros
// ----------------------------------------------------------------------------
-#define LOG_BUFFER_SIZE 0x800
-
#define COLOR_CLEAR "\033[0m"
#define COLOR_TRACE "\033[1;34m"
#define COLOR_INFO "\033[1;32m"
@@ -33,13 +32,19 @@
#define LEVEL_ATTENTION "ATTENTION"
// ----------------------------------------------------------------------------
+// [section] extern globals
+// ----------------------------------------------------------------------------
+void (*log_trace)(const char *format, ...) = log_trace_to_stdout;
+void (*log_info)(const char *format, ...) = log_info_to_stdout;
+void (*log_attention)(const char *format, ...) = log_attention_to_stdout;
+
+// ----------------------------------------------------------------------------
// [section] definitions
// ----------------------------------------------------------------------------
-static void log_default(const char *color_code, const char *level, const char *format, va_list args) {
+static void log_to_buffer(char buffer[LOG_BUFFER_SIZE], const char *color_code, const char *level, const char *format, va_list args) {
assert(level);
assert(format);
- char log_buffer[LOG_BUFFER_SIZE];
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
int msec = (int)(ts.tv_nsec / 1000000l);
@@ -47,7 +52,7 @@ static void log_default(const char *color_code, const char *level, const char *f
pid_t pid = getpid();
int rem = snprintf(
- log_buffer,
+ buffer,
LOG_BUFFER_SIZE,
"\r%s%d-%02d-%02d %02d:%02d:%02d.%03d %07d [%s]%s ",
color_code ? color_code : "",
@@ -63,36 +68,70 @@ static void log_default(const char *color_code, const char *level, const char *f
color_code ? COLOR_CLEAR : ""
);
- vsnprintf(log_buffer + rem, LOG_BUFFER_SIZE - rem, format, args);
- printf("%s\n", log_buffer);
- fflush(stdout);
+ vsnprintf(buffer + rem, LOG_BUFFER_SIZE - rem, format, args);
}
-void log_trace(const char *format, ...) {
+void log_trace_to_stdout(const char *format, ...) {
assert(format);
+ (void)format;
#if defined(LOG_TRACE)
va_list args;
va_start(args, format);
- log_default(COLOR_TRACE, LEVEL_TRACE, format, args);
+ char buffer[LOG_BUFFER_SIZE];
+ log_to_buffer(buffer, COLOR_TRACE, LEVEL_TRACE, format, args);
+ printf("%s\n", buffer);
+ fflush(stdout);
+ va_end(args);
+#endif
+}
+
+void log_info_to_stdout(const char *format, ...) {
+ assert(format);
+ va_list args;
+ va_start(args, format);
+ char buffer[LOG_BUFFER_SIZE];
+ log_to_buffer(buffer, COLOR_INFO, LEVEL_INFO, format, args);
+ printf("%s\n", buffer);
+ fflush(stdout);
+ va_end(args);
+}
+
+void log_attention_to_stdout(const char *format, ...) {
+ assert(format);
+ va_list args;
+ va_start(args, format);
+ char buffer[LOG_BUFFER_SIZE];
+ log_to_buffer(buffer, COLOR_ATTENTION, LEVEL_ATTENTION, format, args);
+ printf("%s\n", buffer);
+ fflush(stdout);
va_end(args);
-#else
+}
+
+void log_trace_to_buffer(char buffer[LOG_BUFFER_SIZE], const char *format, ...) {
+ assert(format);
(void)format;
+
+#if defined(LOG_TRACE)
+ va_list args;
+ va_start(args, format);
+ log_to_buffer(buffer, NULL, LEVEL_TRACE, format, args);
+ va_end(args);
#endif
}
-void log_info(const char *format, ...) {
+void log_info_to_buffer(char buffer[LOG_BUFFER_SIZE], const char *format, ...) {
assert(format);
va_list args;
va_start(args, format);
- log_default(COLOR_INFO, LEVEL_INFO, format, args);
+ log_to_buffer(buffer, NULL, LEVEL_INFO, format, args);
va_end(args);
}
-void log_attention(const char *format, ...) {
+void log_attention_to_buffer(char buffer[LOG_BUFFER_SIZE], const char *format, ...) {
assert(format);
va_list args;
va_start(args, format);
- log_default(COLOR_ATTENTION, LEVEL_ATTENTION, format, args);
+ log_to_buffer(buffer, NULL, LEVEL_ATTENTION, format, args);
va_end(args);
}