You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
1.5 KiB

#pragma once
#include <windows.h>
#include <ctime>
#include <mutex>
#include <iostream>
#include <fstream>
#include <direct.h>
using namespace std;
static std::mutex _mtx;
class Log
{
public:
Log();
~Log();
static void info(std::string log)
{
string type = "INFO";
write(log, type);
}
static void debug(std::string log)
{
string type = "DEBUG";
write(log, type);
}
static void warning(std::string log)
{
string type = "WARNING";
write(log, type);
}
static void error(std::string log)
{
string type = "ERROR";
write(log, type);
}
static void critical(std::string log)
{
string type = "CRITICAL";
write(log, type);
}
static std::string getTimestamp()
{
time_t timep;
time(&timep);
char tmp[64];
struct tm nowTime;
localtime_s(&nowTime, &timep);
strftime(tmp, sizeof(tmp), "%Y-%m-%d-%H:%M:%S", &nowTime);
return std::string(tmp);
}
static void string_replace(string& s1, const string& s2, const string& s3)
{
string::size_type pos = 0;
string::size_type a = s2.size();
string::size_type b = s3.size();
while ((pos = s1.find(s2, pos)) != string::npos)
{
s1.replace(pos, a, s3);
pos += b;
}
}
static void write(std::string log, std::string type)
{
string filePath = "C:/test.log"; //´æÈÕÖ¾ÎļþµÄ·¾¶
std::ofstream ofs;
_mtx.lock();
ofs.open(filePath, std::ofstream::app);
ofs << getTimestamp().c_str() << "-";
ofs << "[" << type.c_str() << "]-";
ofs.write(log.c_str(), log.size());
ofs << std::endl;
ofs.close();
_mtx.unlock();
}
};