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
39
|
// 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();
__attribute__((format(printf, 4, 5)))
void log_log(LogLevelE lvl, const char *src_file, u64 src_line, const char *fmt, ...);
|