toaruos/kernel/misc/logging.c
2011-12-14 22:15:47 -06:00

65 lines
1.2 KiB
C

/* vim: tabstop=4 shiftwidth=4 noexpandtab
*
* Kernel Logging Facility
*
* Maintains a log in-memory as well as to serial (unless
* told not to).
*/
#include <system.h>
#include <list.h>
#include <logging.h>
#include <va_list.h>
static list_t * log_buffer;
static char * messages[] = {
"info",
"note",
"warn",
"err ",
"crit"
};
void logging_install() {
log_buffer = list_create();
LOG(INFO, "Kernel log initialized");
}
void debug_print_log_entry(log_entry_t * l) {
int i;
i = kprintf("[%s] %s ",
messages[l->type],
l->module);
while (i < 40) {
kprintf(" ");
++i;
}
i = kprintf("line %d", l->line);
while (i < 10) {
kprintf(" ");
++i;
}
kprintf("%s\n", l->text);
}
void debug_print_log() {
foreach(entry, log_buffer) {
debug_print_log_entry((log_entry_t *)entry->value);
}
}
void klog(log_type_t type, char *module, unsigned int line, const char *fmt, ...) {
if (!log_buffer) return;
log_entry_t * l = malloc(sizeof(log_entry_t));
l->type = type;
l->module = module;
l->line = line;
l->text = malloc(sizeof(char) * 1024);
va_list args;
va_start(args, fmt);
vasprintf(l->text, fmt, args);
va_end(args);
list_insert(log_buffer, l);
}