前言:
编译Linux下的C代码,需要添加调试日志,此时使用zlog进行封装。
关于zlog的源码安装可以参考文章
https://blog.csdn.net/weixin_41010318/article/details/85339456
封装相关代码
zlog.conf 配置文件
[formats]
#simple = "%m%n"
#simple = "%f:%L|%V: %m%n"
[rules]
my_cat.DEBUG >stdout;
my_cat.DEBUG "/var/log/aa.log"
#my_cat.DEBUG >stdout; simple
zlog_api.h
#include "zlog.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 "35;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"
extern zlog_category_t * log_category;
extern int log_init();
extern void log_fini();
#define LOG_FATAL(fmt,args...) \
zlog(log_category, __FILE__, sizeof(__FILE__)-1, \
__func__, sizeof(__func__)-1, __LINE__, \
ZLOG_LEVEL_FATAL, ESC_START COLOR_FATAL fmt ESC_END, ##args)
#define LOG_ERROR(fmt , args...) \
zlog(log_category, __FILE__, sizeof(__FILE__)-1, \
__func__, sizeof(__func__)-1, __LINE__, \
ZLOG_LEVEL_ERROR, ESC_START COLOR_ERROR fmt ESC_END, ##args)
#define LOG_WARN(fmt, args...) \
zlog(log_category, __FILE__, sizeof(__FILE__)-1, \
__func__, sizeof(__func__)-1, __LINE__, \
ZLOG_LEVEL_WARN, ESC_START COLOR_WARN fmt ESC_END, ##args)
#define LOG_NOTICE(fmt , args...) \
zlog(log_category, __FILE__, sizeof(__FILE__)-1, \
__func__, sizeof(__func__)-1, __LINE__, \
ZLOG_LEVEL_NOTICE, ESC_START COLOR_NOTICE fmt ESC_END, ##args)
#define LOG_INFO(fmt,args...) \
zlog(log_category, __FILE__, sizeof(__FILE__)-1, \
__func__, sizeof(__func__)-1, __LINE__, \
ZLOG_LEVEL_INFO, ESC_START COLOR_INFO fmt ESC_END, ##args)
#define LOG_DEBUG(fmt , args...) \
zlog(log_category, __FILE__, sizeof(__FILE__)-1, \
__func__, sizeof(__func__)-1, __LINE__, \
ZLOG_LEVEL_DEBUG, ESC_START COLOR_DEBUG fmt ESC_END, ##args)
zlog.c
#include <stdio.h>
#include "zlog_api.h"
zlog_category_t * log_category = NULL;
int log_init() {
//初始化.配置文件名是固定的log.conf
if (zlog_init("zlog.conf")) {
printf("Error: zlog_init\n");
zlog_fini();
return -1;
}
//找到分类,在配置文件中的category
log_category = zlog_get_category("my_cat");
if (!log_category) {
printf("Error: get cat fail\n");
zlog_fini();
return -2;
}
return 0 ;
}
void log_fini() {
zlog_fini();
}
zlog_test.c TCP客户端
#include <stdio.h>
#include "zlog_api.h"
int main()
{
if(log_init() != 0)
{
printf("log init error\n");
return -1;
}
LOG_DEBUG("test zlog demo!\n");
log_fini();
return 0;
}
Makefile
INCS = -I/usr/local/include
CFLAGS = $(INCS) -L/usr/local/lib -lzlog -lpthread
zlog_test:zlog_test.o zlog.o
gcc -g -Wall -o zlog_test -g zlog_test.o zlog.o $(CFLAGS)
zlog_test.o:zlog_test.c
gcc $(INCS) -c -g -o $@ $<
zlog.o:zlog.c
gcc $(INCS) -c -g -o $@ $<
clean:
rm zlog.o zlog_test.o zlog_test
编译:make
执行:./zlog_test