示例:
Log(DEBUG,"this is debugn"); Log(INFO,"this is infon"); Log(ERROR,"this is errorn"); Log(WARN,"this is warnn");
一个log.c文件和一个log.h文件
使用时包含log.h文件即可。暂时支持四个级别和红绿黄蓝四种颜色,若要增加或扩展,自行更改。
不支持存储日志到文件,以及对日志文件的按日期,按大小等的切割,如有需要,可自行扩展。
计划增加以下内容:
1.增加是否启用日志输出到文件开关,可以选择把日志保存到文件中(写文件属于耗时操作,这块可考虑发送事件或消息给线程去写日志,操做日志的切割)。
2.按日期生成日志文件,可配置保留多少天,超过设定的天数则自动清除超过天数的日志。
3.可增加参数设定限制日志文件的大小,超过限制大小可选择是从头覆盖还是删除重记,还是不在记录。
log.c文件内容:
代码语言:javascript复制/**
日志打印示例。
使用:
Log(DEBUG, "This is debug infon");
结果:
[2018-07-22 23:37:27:172] [DEBUG] [main.cpp:5] This is debug info
默认打印当前时间(精确到毫秒)、文件名称、行号。
*/
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <sys/time.h>
#include "log.h"
#ifndef LOGLEVEL
#define LOGLEVEL DEBUG
#endif
// 使用了GNU C扩展语法,只在gcc(C语言)生效,
// g 的c 版本编译不通过
static const char* s_loginfo[] = {
[ERROR] = "ERROR",
[WARN] = "WARN",
[INFO] = "INFO",
[DEBUG] = "DEBUG",
};
static void get_timestamp(char *buffer)
{
time_t t;
struct tm *p;
struct timeval tv;
int len;
int millsec;
t = time(NULL);
p = localtime(&t);
gettimeofday(&tv, NULL);
millsec = (int)(tv.tv_usec / 1000);
/* 时间格式:[2011-11-15 12:47:34:888] */
len = snprintf(buffer, 32, "[d-d-d d:d:d:d] ",
p->tm_year 1900, p->tm_mon 1,
p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec, millsec);
buffer[len] = '