一 printf实现的宏
测试代码:
#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#define ESC_START "\033["
#define ESC_END "\033[0m"
#define COLOR_FATAL "31;40;5m"
#define COLOR_ALERT "31;40;1m"
#define COLOR_CRIT "31;40;1m"
#define COLOR_ERROR "31;40;1m"
#define COLOR_WARN "33;40;1m"
#define COLOR_NOTICE "34;40;1m"
#define COLOR_INFO "32;40;1m"
#define COLOR_DEBUG "36;40;1m"
#define COLOR_TRACE "37;40;1m"
#define MSG_INFO(format, ...) printf(ESC_START COLOR_INFO"%s:%d -- " format "\n" ESC_END, __func__, __LINE__,##__VA_ARGS__)
#define MSG_DEBUG(format, ...) printf(ESC_START COLOR_DEBUG "%s:%d -- " format "\n" ESC_END, __func__, __LINE__,##__VA_ARGS__)
#define MSG_WARN(format, ...) printf(ESC_START COLOR_WARN "%s:%d -- " format "\n" ESC_END, __func__, __LINE__,##__VA_ARGS__)
#define MSG_ERROR(format, ...) printf(ESC_START COLOR_ERROR "%s:%d -- " format "\n" ESC_END, __func__, __LINE__,##__VA_ARGS__)
int main(int argc, char **argv)
{
struct passwd *p = getpwent();
if(!p){
perror("getpwent");
exit(1);
}
MSG_INFO("hello ");
MSG_DEBUG("hello ");
MSG_WARN("hello ");
MSG_ERROR("hello ");
return 0;
}
测试结果:
是不是真的很漂亮。
二 自定义的输出函数
测试代码:
#include <sys/types.h>
#include <pwd.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#define ESC_START "\033["
#define ESC_END "\033[0m"
#define COLOR_FATAL "31;40;5m"
#define COLOR_ALERT "31;40;1m"
#define COLOR_CRIT "31;40;1m"
#define COLOR_ERROR "31;40;1m"
#define COLOR_WARN "33;40;1m"
#define COLOR_NOTICE "34;40;1m"
#define COLOR_INFO "32;40;1m"
#define COLOR_DEBUG "36;40;1m"
#define COLOR_TRACE "37;40;1m"
#define APP_LOG_LEVEL_INFO 0x00
#define APP_LOG_LEVEL_DEBUG 0x01
#define APP_LOG_LEVEL_WARNING 0x02
#define APP_LOG_LEVEL_ERROR 0x03
#define APP_LOG_LEVEL_FATAL 0x04
#define APP_DEFAULT_LOG_LEVEL APP_LOG_LEVEL_INFO
static int32_t log_level = APP_LOG_LEVEL_INFO;
void app_log (int32_t level, const char * fmt, ...)
{
va_list list;
//this is log
if (level >= log_level)
{
va_start (list, fmt);
vprintf (fmt, list);
va_end (list);
fflush (stdout);
}
}
// printf(ESC_START COLOR_INFO"%s:%d -- " format "\n" ESC_END, __func__, __LINE__,##__VA_ARGS__)
#define _APP_LOG_INFO(level, ...) \
do{\
app_log(level,ESC_START COLOR_INFO"%s:%d -- ",__func__,__LINE__); \
app_log (level, __VA_ARGS__); \
app_log(level,"\n" ESC_END); \
}while(0)
#define _APP_LOG_DEBUG(level, ...) \
do{\
app_log(level,ESC_START COLOR_DEBUG"%s:%d -- ",__func__,__LINE__); \
app_log (level, __VA_ARGS__); \
app_log(level,"\n" ESC_END); \
}while(0)
#define _APP_LOG_WARNING(level, ...) \
do{\
app_log(level,ESC_START COLOR_WARN"%s:%d -- ",__func__,__LINE__); \
app_log (level, __VA_ARGS__); \
app_log(level,"\n" ESC_END); \
}while(0)
#define _APP_LOG_ERROR(level, ...) \
do{\
app_log(level,ESC_START COLOR_ERROR"%s:%d -- ",__func__,__LINE__); \
app_log (level, __VA_ARGS__); \
app_log(level,"\n" ESC_END); \
}while(0)
#define _APP_LOG_FATAL(level, ...) \
do{\
app_log(level,ESC_START COLOR_FATAL"%s:%d -- ",__func__,__LINE__); \
app_log (level, __VA_ARGS__); \
app_log(level,"\n" ESC_END); \
exit(EXIT_FAILURE); \
}while(0)
#define APP_LOG_DEBUG(...) _APP_LOG_DEBUG (APP_LOG_LEVEL_DEBUG, __VA_ARGS__)
#define APP_LOG_INFO(...) _APP_LOG_INFO (APP_LOG_LEVEL_INFO, __VA_ARGS__)
#define APP_LOG_WARNING(...) _APP_LOG_WARNING (APP_LOG_LEVEL_WARNING, __VA_ARGS__)
#define APP_LOG_ERROR(...) _APP_LOG_ERROR (APP_LOG_LEVEL_ERROR, __VA_ARGS__)
#define APP_LOG_FATAL(...) _APP_LOG_FATAL (APP_LOG_LEVEL_FATAL, __VA_ARGS__)
int main(int argc, char **argv)
{
struct passwd *p = getpwent();
if(!p){
perror("getpwent");
exit(1);
}
APP_LOG_INFO("hello ");
APP_LOG_DEBUG("hello ");
APP_LOG_WARNING("hello ");
APP_LOG_ERROR("hello");
APP_LOG_FATAL("hello");
return 0;
}
测试效果:
小结
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)