一种简易的log输出方式
代码:
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#define LOG_QUIET 0
#define LOG_COUT_FILE 1
#define LOG_COUT_LINE 1
#if LOG_QUIET
#define LogTrace(...)
#define LogDebug(...)
#define LogInfo(...)
#define LogWarn(...)
#define LogError(...)
#define LogFatal(...)
#else
#define LogTrace(...) LogBase(_LOG_TRACE, __FILE__, __LINE__, __VA_ARGS__)
#define LogDebug(...) LogBase(_LOG_DEBUG, __FILE__, __LINE__, __VA_ARGS__)
#define LogInfo(...) LogBase(_LOG_INFO, __FILE__, __LINE__, __VA_ARGS__)
#define LogWarn(...) LogBase(_LOG_WARN, __FILE__, __LINE__, __VA_ARGS__)
#define LogError(...) LogBase(_LOG_ERROR, __FILE__, __LINE__, __VA_ARGS__)
#define LogFatal(...) LogBase(_LOG_FATAL, __FILE__, __LINE__, __VA_ARGS__)
#endif
enum
{
_LOG_TRACE,
_LOG_DEBUG,
_LOG_INFO,
_LOG_WARN,
_LOG_ERROR,
_LOG_FATAL
};
static const char *level_strings[] = {
"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"};
void LogBase(int level, const char *file, int line, const char *fmt, ...);
int main(int argc, char **argv)
{
LogTrace("trace:%d\n", 7);
LogDebug("debug\n");
LogInfo("info:%d\n", 4);
LogError("error:%d\n", -1);
return 0;
}
/**
* @brief output debug information
*
* @param level information level
* @param file filename
* @param line line
* @param fmt the output format
* @param ... specific parameters
*/
void LogBase(int level, const char *file, int line, const char *fmt, ...)
{
char str[256] = {0};
va_list args;
va_start(args, fmt);
#if 0
int fprintf(FILE *stream, const char *format, ...);
int vfprintf(FILE *stream, const char *format, va_list arg_list);
/*fprintf函数中的可变参数列表是直接传递给函数的,
vfprintf函数中的可变参数列表是先打包成一个va_list对象,再传递给函数。*/
#endif
// fprintf(stdout, "%-5s %s:%d: ", level_strings[level], file, line);
// vfprintf(stdout, fmt, args);
printf("%-5s %s:%d: ", level_strings[level], file, line);
vsnprintf(str, sizeof(str), fmt, args);
printf("%s", str);
va_end(args);
}
本文由作者按照 CC BY 4.0 进行授权