工程中用的是log4cpp这种库,然后为了多语言、修改日志免编译、可xml配置、纯cpp库可用、qt库可用…,配套工程就写了3个。
开发小工具时,往往就一个小函数。
#ifndef _LOGGER_H_
#define _LOGGER_H_
#include <string>
#include <QString>
void WriteLog(const std::string &err_msg, const char *file_name, const int file_line);
void WriteLog(const char *err_msg, const char *file_name, const int file_line);
void WriteLog(const QString &err_msg, const char *file_name, const int file_line);
#define LogX(x) WriteLog(x, __FILE__, __LINE__)
#endif // End of _LOGGER_H_
#include <fstream>
#include <ctime>
#include "logger.h"
const std::string logFileName = "./log_file.log";
void WriteLog(const std::string &err_msg, const char *file_name, const int file_line)
{
std::string sLogFileName = logFileName;
std::fstream file;
file.open(sLogFileName.c_str(), std::ios::app);
if (!file) //文件不存在
{
return;
}
if (file && file.is_open())
{
time_t t = time(0);
char tmp[64];
strftime(tmp, sizeof(tmp), "%Y.%m.%d.%H:%M:%S : ", localtime(&t));
char itemp[32] = { 0 };
itoa(file_line, itemp, 10);
file << tmp << err_msg << " : " << file_name << " : " << itemp << std::endl;
file.close();
}
}
void WriteLog(const char *err_msg, const char *file_name, const int file_line)
{
WriteLog(std::string(err_msg), file_name, file_line);
}
void WriteLog(const QString &err_msg, const char *file_name, const int file_line)
{
WriteLog(err_msg.toStdString(), file_name, file_line);
}