模仿glog风格的log实现
需求#
实现一个类似glog风格支持<<链式调用的log库。
代码#
#x
将文本转为字符串,__FILE__
获取文件名,__LINE__
获取行号。
利用析构函数特性,每行LOG结束后调用,完成日志消息拼接。
#include <string>
#include <iostream>
#include <cstring>
// set filename and line num as log header
#define __NAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#define LOG(x) log(#x, __NAME__, __LINE__)
class log
{
public:
log(const std::string& level, const char* file, int line)
{
body = "[" + level + "][" + file + ":" + \
std::to_string(line) + "] " ;
}
template<typename type>
log& operator<<(type msg)
{
body += std::to_string(msg);
return *this;
}
log& operator<<(const char* msg)
{
body += msg;
return *this;
}
~log()
{
std::cout << body << std::endl;
}
private:
std::string body;
};
int main()
{
LOG(INFO) << "test" << 111;
LOG(WARN) <<"float: " << float(41*8 + 59%8)/640*1900;
return 0;
}
效果#
[INFO][example.cpp:38] test111
[WARN][example.cpp:39] float: 982.656189
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2022-09-20 服务器热插拔硬盘移除指南