su.log.h
首先看头文件。最重要的莫过于su_log_t结构体了:
/** Type of log structure. */
typedef struct su_log_s su_log_t;
/** Prototype for logging function */
typedef void (su_logger_f)(void *stream, char const *fmt, va_list ap);
/** Log object. */
struct su_log_s {
int log_size;
char const *log_name;
char const *log_env;
unsigned log_default;
unsigned log_level;
int log_init;
su_logger_f *log_logger;
void *log_stream;
};
结构体本身并不复杂。包括结构体对象空间大小、日志名称、日志的环境变量名、日志等级(包括缺省)、日志是否初始化标志、日志输出函数和日志流对象指针。
然后定义了一个初始化结构体变量的宏,可以用做右值。
/** Initialize a su_log_t structure */
#define SU_LOG_INIT(name, env, level) \
{ sizeof(su_log_t), name, env, level, SU_LOG_MAX, 0, NULL, NULL, }
接着看到了一个之前未见过的用法:
SOFIAPUBFUN void su_log(c