#ifndef _PRINT_H
#define _PRINT_H
#include <iostream>
#include <fstream>
#define FILE_NAME "output.log"
//#define LOG_TAG "NONE" //输出log所在的模块,可将此宏放到makefile中赋值
//#define COUT_LEVEL 2 //可配置log等级,可将此变量放到makefile文件中配置, 0:无log, 注掉使用默认log
#if defined(COUT_LEVEL) //defined而不是define
#define DEBUGLEVEL COUT_LEVEL
#else
#define DEBUGLEVEL 0x07 //默认log等级,打印 LOG_ERR LOG_WARN LOG_INFO
#endif
#define FS_IN //是否写入文件
#ifdef FS_IN
//#define FILE_LEVEL 2 //写入文件log等级
#if defined(FILE_LEVEL)
#define FSLEVEL FILE_LEVEL
#else
#define FSLEVEL 0x07 //默认log等级,打印 LOG_ERR LOG_WARN LOG_INFO
#endif
#endif
/*debug levels*/
#define LOG_ERR 0x00
#define LOG_WARN 0x01
#define LOG_INFO 0x02
#define LOG_DEBUG 0x03
#define ULOGE(x...) dprint(LOG_ERR, x)
#define ULOGW(x...) dprint(LOG_WARN, x)
#define ULOGI(x...) dprint(LOG_INFO, x)
#define ULOGD(x...) dprint(LOG_DEBUG, x)
#define dprint(level, x...) dprint_info(level, LOG_TAG, __LINE__, __FUNCTION__, x)
#ifdef FS_IN
class bufLog {
public:
std::filebuf fb;
public:
bufLog(){this->fb.open(FILE_NAME,std::ios::out); }
~bufLog(){fb.close();}
};
#endif
static const char *log_level[4] ={"ERROR", "WARN", "INFO", "DEBUG"};
//static const std::string log_level[4] ={"ERROR", "WARN", "INFO", "DEBUG"};
#ifdef FS_IN
static bufLog BufFile;
static std::ostream fos(&BufFile.fb);
#endif
template <typename T>
std::ostream &print(std::ostream &os, const T &t)
{
return os << t<<std::endl;
}
template <typename T, typename... Args>
std::ostream &print(std::ostream &os, const T &t, const Args &... rest)
{
os<< t ;
return print(os, rest...);
}
template <typename... Args>
int dprint_info(int level, const char *module, const int line, const char *pfun, const Args &... rest)
{
#ifdef FS_IN
if(0x01<<level & FSLEVEL){
fos<<"["<<log_level[level]<<"]"<<"["<<module<<"]"<<"["<<line<<"]"<<pfun<<": ";
print(fos, rest...);
}
#endif
if(DEBUGLEVEL & 0x01<<level ){
std::cout<<"["<<log_level[level]<<"]"<<"["<<module<<"]"<<"["<<line<<"]"<<pfun<<": ";
print(std::cout, rest...);
}
}
#endif
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
log打印函数,功能如下: 1 可控制宏COUT_LEVEL决定log,输出等级,默认为3,输出ULOGE,ULOGW,ULOGI 2 可控制宏FS_IN是否输出到文件,可通过宏FILE_LEVEL决定输出等级,默认为3,文件路径为当前路径,名字默认为output.log可通过宏FILE_NAME来重新指定 3 宏LOG_TAG输出log所在的模块,可将此宏放到makefile中或.h中或.cpp赋值, 4 可变参数,类似于cout,打印时,自动打印loglevel等级,定义的LOG_TAG标签,所在行数,所在函数,后接任意参数个数及类型,例:[ERROR][NONE][65]main: 1123 num=10
资源推荐
资源详情
资源评论
收起资源包目录
print.rar (1个子文件)
print.h 2KB
共 1 条
- 1
资源评论
沐雨青城
- 粉丝: 3
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功