summaryrefslogtreecommitdiff
path: root/src/log.h
blob: 287ee28cca6fd72225ed574dd88c48b46cab6e30 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Based on: https://github.com/rxi/log.c/
#pragma once

#include "common.h"

#include <stdio.h>
#include <stdarg.h>

typedef void (*log_LockProc)(b32 should_lock);

typedef enum {
    LogLevelTrace = 0,
    LogLevelDebug = 1,
    LogLevelInfo  = 2,
    LogLevelWarn  = 3,
    LogLevelError = 4,
    LogLevelFatal = 5,
} LogLevelE;

#define log_trace(...) log_log(LogLevelTrace, __FILE__, __LINE__, __VA_ARGS__)
#define log_debug(...) log_log(LogLevelDebug, __FILE__, __LINE__, __VA_ARGS__)
#define log_info(...) log_log(LogLevelInfo, __FILE__, __LINE__, __VA_ARGS__)
#define log_warn(...) log_log(LogLevelWarn, __FILE__, __LINE__, __VA_ARGS__)
#define log_error(...) log_log(LogLevelError, __FILE__, __LINE__, __VA_ARGS__)
#define log_fatal(...) log_log(LogLevelFatal, __FILE__, __LINE__, __VA_ARGS__)

// If this is not called, logging will have no effect.
// Most likely pass stdout or stderr
void log_init(FILE *out);

void log_set_level(LogLevelE lvl);
void log_set_quiet(b32 quiet);
void  log_set_lock(log_LockProc proc);
void    log_set_fp(FILE *log_file);

const char *log_get_level();

void log_log(LogLevelE lvl, const char *src_file, u64 src_line, const char *fmt, ...);