在计算机软件中,日志对记录动作、定位错误起到了至关重要的作用。通常在软件发布后,在用户使用中遇到问题的情况下使用,通过日志定位错误,从而快速解决问题。
而在C++中却没有自己的日志类,想要使用日志通常需要自己定义或者下载使用boost。所以为了方便使用,我简单的实现了日志类的功能。
实现代码如下(Logger.hpp):
#pragma once
#include <iostream>
#include <string>
#include <fstream>
#include <assert.h>
#include "Timer.hpp"
enum {
Fatal,
Error,
Warring,
Info,
Debug,
Trace
};
class Logger {
public:
Logger(std::string _path) :path(_path) {
ofs.open(_path,std::ios::app);
assert(ofs.is_open());
};
~Logger(){
ofs.close();
}
void Log(const std::string & log_str, const int & Level = Info) {
std::string log_level;
switch (Level) {
case Fatal:
log_level = "Fatal";
break;
case Error:
log_level = "Error";
break;
case Warring:
log_level = "Warring";
break;
case Info:
log_level = "Info";
break;
case Debug:
log_level = "Debug";
break;
case Trace:
log_level = "Trace";
break;
default:
log_level = "Info";
break;
}
ofs << "[";
ofs << timer.getTimeStr();
ofs << "] ";
ofs << log_level << " : " << log_str << "\n";
}
private:
std::ofstream ofs;
std::string path;
Timer timer;
};
注:Timer.hpp为我自己定义的时间类,详情可见我的上一篇文章
(C++实现Timer时间类),在这里不多做解释。
使用方法如下:
#include "Logger.hpp"
int main()
{
Logger logger("out.log");
logger.Log("start running!", Debug);
logger.Log("start into sleep!", Info);
Sleep(1000);
logger.Log("sleep end!", Warring);
logger.Log("end!", Error);
return 0;
}
输出结果:
关注微信公众号: 笑马编程 后台发送:C++资料,
即可领取C++相关学习资料哦!