cemu
载入中...
搜索中...
未找到
log.h
浏览该文件的文档.
1
12#ifndef LOG_H
13#define LOG_H
14
15// ==================================================================== //
16// Include
17// ==================================================================== //
18
19#ifdef __cplusplus
20 extern "C" {
21#endif
22
23#include <stdio.h>
24#include <stdarg.h>
25#include <stdbool.h>
26#include <string.h>
27#include "color.h"
28
29
30// ==================================================================== //
31// Define
32// ==================================================================== //
33
35#define LOG_VERSION "0.1.0"
37#define MAX_CALLBACKS 32
39#define LOG_USE_COLOR
40
41
42// ==================================================================== //
43// Data: Log
44// ==================================================================== //
45
49typedef struct
50{
51 va_list ap;
52 const char *fmt;
53 const char *file;
54 struct tm *time;
55 void *udata;
56 int line;
57 int level;
58} log_Event;
59
64typedef void (*log_LogFn)(log_Event *ev);
65
66
71typedef void (*log_LockFn)(bool lock, void *udata);
72
73
87
91typedef struct {
93 void *udata;
94 int level;
95} Callback;
96
97
102static struct {
103 void *udata;
105 int level;
106 bool quiet;
109
110
111
112// ==================================================================== //
113// Declare API: Log
114// ==================================================================== //
115
121static inline const char *filename_from_path(const char *path) {
122 const char *bname = strrchr(path, '/');
123 return (bname != NULL) ? bname + 1 : path;
124}
125
127#define log_trace(...) log_log(LOG_TRACE, __FILE__, __LINE__, __VA_ARGS__)
128
130#define log_debug(...) log_log(LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
131
133#define log_info(...) log_log(LOG_INFO, __FILE__, __LINE__, __VA_ARGS__)
134
136#define log_warn(...) log_log(LOG_WARN, __FILE__, __LINE__, __VA_ARGS__)
137
139#define log_error(...) log_log(LOG_ERROR, __FILE__, __LINE__, __VA_ARGS__)
140
142#define log_fatal(...) \
143 do { \
144 log_log(LOG_FATAL, __FILE__, __LINE__, __VA_ARGS__); \
145 exit(1); \
146 } while(0)
147
149#define log_assert(condition, ...) \
150 do { \
151 if (!(condition)) { \
152 log_log(LOG_ASSERT_0, __FILE__, __LINE__, _red(#condition) " " __VA_ARGS__); \
153 exit(1); \
154 } else { \
155 log_log(LOG_ASSERT_1, __FILE__, __LINE__, _green(#condition) " " __VA_ARGS__); \
156 } \
157 } while(0)
158
159
165const char *log_level_string(int level);
166
172void log_set_lock(log_LockFn fn, void *udata);
173
174
179void log_set_level(int level);
180
181
204void log_set_quiet(bool enable);
205
215int log_add_callback(log_LogFn fn, void *udata, int level);
216
226int log_add_fp(FILE *fp, int level);
227
236void log_log(int level, const char *file, int line, const char *fmt, ...);
237
238
239
240
241
242#ifdef __cplusplus
243}
244#endif
245
246#endif /* LOG_H */
ANSI颜色宏头文件
#define NULL
Definition list.h:22
const char * log_level_string(int level)
获取日志级别的字符串
Definition log.c:90
void log_set_lock(log_LockFn fn, void *udata)
设置日志锁
Definition log.c:95
static const char * filename_from_path(const char *path)
获得文件路径内的文件名
Definition log.h:121
Callback callbacks[MAX_CALLBACKS]
Definition log.h:107
int log_add_callback(log_LogFn fn, void *udata, int level)
添加日志回调
Definition log.c:111
void(* log_LogFn)(log_Event *ev)
日志回调函数
Definition log.h:64
void log_set_quiet(bool enable)
设置日志是否静默
Definition log.c:106
static struct @2 L
日志库全局变量结构体
log_LockFn lock
Definition log.h:104
void log_log(int level, const char *file, int line, const char *fmt,...)
日志输出
Definition log.c:139
int level
Definition log.h:105
bool quiet
Definition log.h:106
#define MAX_CALLBACKS
Definition log.h:37
log_Level
日志级别枚举类
Definition log.h:77
@ LOG_ERROR
Definition log.h:82
@ LOG_ASSERT_0
Definition log.h:85
@ LOG_INFO
Definition log.h:80
@ LOG_DEBUG
Definition log.h:79
@ LOG_FATAL
Definition log.h:83
@ LOG_WARN
Definition log.h:81
@ LOG_ASSERT_1
Definition log.h:84
void(* log_LockFn)(bool lock, void *udata)
日志锁回调函数
Definition log.h:71
void log_set_level(int level)
设置日志级别
Definition log.c:101
int log_add_fp(FILE *fp, int level)
添加日志文件和级别
Definition log.c:124
日志回调结构体
Definition log.h:91
log_LogFn fn
Definition log.h:92
void * udata
Definition log.h:93
int level
Definition log.h:94
日志事件结构体
Definition log.h:50
const char * fmt
Definition log.h:52
int level
Definition log.h:57
void * udata
Definition log.h:55
struct tm * time
Definition log.h:54
const char * file
Definition log.h:53
va_list ap
Definition log.h:51
int line
Definition log.h:56