我想用c ++编写一个日志文件.我正在处理某些事情,因此我需要维护我处理的事物的属性的日志,以便我可以恢复到这个日志文件,以查看我特别感兴趣的任何属性..有人可以帮助我实现这个?
Vol*_*orm 31
记录的标准方法(根据我的经验)是使用stdout或stderr流.在C++中使用这些,你需要包含iostream,并使用如下:
#include <iostream>
int main(int argc, char* argv[])
{
using std::cout;
using std::cerr;
using std::endl;
cout << "Output message" << endl;
cerr << "Error message" << endl;
}
Run Code Online (Sandbox Code Playgroud)
然而,这只能实现对那些通常最终到达终端的输出的打印.如果要使用这些标准流方法(可读性很强)输出到文件,则必须以某种方式重定向输出.一种方法是使用freopencstdio提供的函数.这样做是打开一个文件,并将给定的流移动到该文件.请参阅此处获取文档 一个例子是:
#include <iostream>
#include <cstdio>
int main(int argc, char* argv[])
{
using namespace std;
freopen( "output.txt", "w", stdout );
freopen( "error.txt", "w", stderr );
cout << "Output message" << endl;
cerr << "Error message" << endl;
}
Run Code Online (Sandbox Code Playgroud)
(我using namespace std;为了简洁而改为那里.)
您正在将标准输出流stdout(由其使用cout)移动到output.txt(在写入模式下),并且您也在写入模式下移动stderr(由...使用cerr)到error.txt.
希望这可以解决问题.
这非常方便,只需插入例如可以从程序中任何位置调用的公共头文件中即可(更好的方法是使用这些函数形成一个类)
inline string getCurrentDateTime( string s ){
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
if(s=="now")
strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
else if(s=="date")
strftime(buf, sizeof(buf), "%Y-%m-%d", &tstruct);
return string(buf);
};
inline void Logger( string logMsg ){
string filePath = "/somedir/log_"+getCurrentDateTime("date")+".txt";
string now = getCurrentDateTime("now");
ofstream ofs(filePath.c_str(), std::ios_base::out | std::ios_base::app );
ofs << now << '\t' << logMsg << '\n';
ofs.close();
}
Run Code Online (Sandbox Code Playgroud)
用法:Logger(“这是日志消息”); 写入文件(或追加现有文件)
/somedir/log_2017-10-20.txt
Run Code Online (Sandbox Code Playgroud)
内容:
2017-10-20 09:50:59 This is log message
Run Code Online (Sandbox Code Playgroud)
小智 6
您尝试做的事情太深入了,无法在此网站上提供强制解决方案.您可以做的是查看您选择的日志库的文档.在我的例子中,这是Boost.Log一个用于Boost C++库的looging库,其文档可以在这里找到.
我在页面底部指出了我刚刚与之相关的内容
该库不是Boost图书馆馆藏的官方部分,尽管它已通过审核并暂时被接受.审查结果可在此处获得.
所以你要做的就是这样.
| 归档时间: |
|
| 查看次数: |
49709 次 |
| 最近记录: |