60 lines
1.4 KiB
C
60 lines
1.4 KiB
C
#ifndef _PIUMA_LOGGER_H_
|
|
#define _PIUMA_LOGGER_H_
|
|
|
|
#include "../lib/types.h"
|
|
#include "../lib/queue.h"
|
|
|
|
|
|
typedef u8 LogLevel;
|
|
#define LOG_ERROR 0
|
|
#define LOG_WARNING 50
|
|
#define LOG_INFO 100
|
|
#define LOG_DEBUG 150
|
|
|
|
struct LogSourceInfo
|
|
{
|
|
const char *filename;
|
|
u32 line;
|
|
const char *function;
|
|
};
|
|
|
|
typedef u64 LogId;
|
|
struct LogEntry
|
|
{
|
|
LogLevel level;
|
|
char *message;
|
|
|
|
LogId id;
|
|
LogSourceInfo source;
|
|
};
|
|
|
|
struct Logger
|
|
{
|
|
QUEUE_TYPE(struct LogEntry) message_queue = NULL;
|
|
|
|
LogId last_id = 0;
|
|
u64 overflow_count = 0; // Number of times the buffer was full, but we added a message anyway removing the oldest one
|
|
};
|
|
|
|
void Logger_Init(struct Logger *logger);
|
|
void Logger_Deinit(struct Logger *logger);
|
|
|
|
void Logger_Clear(struct Logger *logger);
|
|
void Logger_AddMessage(struct Logger *logger, LogSourceInfo source_info, LogLevel level, const char *format_message, ...);
|
|
void Logger_RemoveOldestMessage(struct Logger *logger);
|
|
|
|
u64 Logger_MessageCount(struct Logger *logger);
|
|
struct LogEntry *Logger_MessageAt(struct Logger *logger, u64 index);
|
|
|
|
|
|
extern struct Logger global_logger;
|
|
|
|
|
|
#define LOG_INIT() Logger_Init(&global_logger)
|
|
#define LOG_DEINIT() Logger_Deinit(&global_logger)
|
|
#define LOG_CLEAR() Logger_Clear(&global_logger)
|
|
#define LOG(level, /*format_message,*/ ...) Logger_AddMessage(&global_logger, LogSourceInfo{.filename = __FILE__, .line = __LINE__, .function = __func__}, level, /*format_message,*/ __VA_ARGS__)
|
|
|
|
|
|
#endif
|