log简单实现

工作需要,自己实现个日志函数,练习一下内部实现:

easy_log.h

#ifndef _EASY_LOG_
#define _EASY_LOG_


#ifdef __cplusplus
extern "C" {
#endif

#define LOG_LEVEL_DEBUG   3
#define LOG_LEVEL_INFO    2
#define LOG_LEVEL_WARN    1
#define LOG_LEVEL_ERROR   0

int log_print(int log_level,const char * pformat, ...);

#define log_debug(...)    log_print(LOG_LEVEL_DEBUG,##__VA_ARGS__)
#define log_info(...)     log_print(LOG_LEVEL_INFO,##__VA_ARGS__)
#define log_warn(...)     log_print(LOG_LEVEL_WARN,##__VA_ARGS__)
#define log_err(...)      log_print(LOG_LEVEL_ERROR,##__VA_ARGS__)
#define log_alert(...)    log_print(LOG_LEVEL_ALERT,##__VA_ARGS__)

#ifdef __cplusplus
}
#endif

#endif //_EASY_LOG_

easy_log.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <stdarg.h>

#include "easy_log.h"

#define BUFF_MAX (1024) 

const char*  log_level_str[] = {   
        "ERROR",
        "WARN",
        "INFO",
        "DEBUG"
};

char* get_log_level_str(int level)
{
     return  log_level_str[level];
}

int log( int level,const char *pformat, va_list _va_list)
{
    FILE* pfile=NULL;
	time_t t;
	struct tm *tmp;
	unsigned int len = 0;
    char szbuf[BUFF_MAX]={0};
    
    if (pformat == NULL) 
    {
	    return -1;
    }

	t = time(NULL);
	tmp = localtime(&t);

	memset(szbuf,0,256);
    sprintf(szbuf, "haha.log");
	pfile = fopen(szbuf, "a");
	
    if(NULL != pfile)
	{
        len = sprintf(szbuf,"[%04d-%02d-%02d %02d:%02d:%02d][%s] ",
		tmp->tm_year+1900,tmp->tm_mon+1,tmp->tm_mday,tmp->tm_hour,tmp->tm_min,tmp->tm_sec,get_log_level_str(level));
	    len += vsprintf(szbuf + len, pformat, _va_list);    
		fseek(pfile,0L,SEEK_END);
		fwrite(szbuf,len,1,pfile);
		fwrite("\n",1,1,pfile);
    }
   fclose(pfile);
    return 0;
}

int log_print(int log_level,const char * format, ...)
{
	va_list list;
	va_start(list, format);
    log(log_level,format, list);
	va_end(list);	
	return 0;
}

main.c:主函数

#include  "easy_log.h"

int main()
{ 
  char  str[24]="lishuwei";
  log_debug("%s",str);
  log_info("%s",str);
  log_warn("%s",str);
  log_err("%s",str);

   return 1;
}

运行结果:

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值