|
|
@ -1,133 +0,0 @@
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include <sys/types.h>
|
|
|
|
|
|
|
|
#include <sys/stat.h>
|
|
|
|
|
|
|
|
#include <fcntl.h>
|
|
|
|
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum PrintMethods
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Screen = 1,
|
|
|
|
|
|
|
|
Onefile,
|
|
|
|
|
|
|
|
Classfile
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
enum LogLevel
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
Info = 0,
|
|
|
|
|
|
|
|
Debug,
|
|
|
|
|
|
|
|
Warning,
|
|
|
|
|
|
|
|
Error,
|
|
|
|
|
|
|
|
Fatal
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::string defaultPath = "./Log/";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Log
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
// 初始化日志,默认向屏幕上输出,输出文件路径默认设置为当前路径下Log.txt文件
|
|
|
|
|
|
|
|
Log(const int printMethod = Screen, const std::string &path = defaultPath)
|
|
|
|
|
|
|
|
: _path(path), _printMethod(printMethod)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 改变日志的输出方式
|
|
|
|
|
|
|
|
void Enable(int newMethod)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
_printMethod = newMethod;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::string LevelToString(int level)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
switch (level)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
case Info:
|
|
|
|
|
|
|
|
return "Info";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Debug:
|
|
|
|
|
|
|
|
return "Debug";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Warning:
|
|
|
|
|
|
|
|
return "Warning";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Error:
|
|
|
|
|
|
|
|
return "Error";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Fatal:
|
|
|
|
|
|
|
|
return "Fatal";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
return "None";
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PrintLog(const std::string &LogMessage, int level)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
switch (_printMethod)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
case Screen:
|
|
|
|
|
|
|
|
printf("%s", LogMessage.c_str());
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Onefile:
|
|
|
|
|
|
|
|
printOnefile("log.txt", LogMessage);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
case Classfile:
|
|
|
|
|
|
|
|
printClassFile(LogMessage, level);
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void printOnefile(const std::string &logName, const std::string &LogMessage)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
std::string fileName = _path;
|
|
|
|
|
|
|
|
fileName += logName;
|
|
|
|
|
|
|
|
int fd = open(fileName.c_str(), O_APPEND | O_WRONLY | O_CREAT, 0666);
|
|
|
|
|
|
|
|
if (fd < 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
perror("printOnefile open");
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
write(fd, LogMessage.c_str(), LogMessage.size());
|
|
|
|
|
|
|
|
close(fd);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void printClassFile(const std::string &LogMessage, int level)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
std::string fileName = "log.txt.";
|
|
|
|
|
|
|
|
fileName += LevelToString(level);
|
|
|
|
|
|
|
|
printOnefile(fileName, LogMessage);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void operator()(int level, const char *format, ...)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
time_t t;
|
|
|
|
|
|
|
|
time(&t);
|
|
|
|
|
|
|
|
struct tm *p;
|
|
|
|
|
|
|
|
p = localtime(&t);
|
|
|
|
|
|
|
|
char leftBuffer[1024];
|
|
|
|
|
|
|
|
snprintf(leftBuffer, sizeof(leftBuffer) - 1, "[%s][%d-%d-%d %d:%d:%d]", LevelToString(level).c_str(),
|
|
|
|
|
|
|
|
p->tm_year + 1900, p->tm_mon + 1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec);
|
|
|
|
|
|
|
|
char rightBuffer[1024];
|
|
|
|
|
|
|
|
va_list ap;
|
|
|
|
|
|
|
|
va_start(ap, format);
|
|
|
|
|
|
|
|
vsnprintf(rightBuffer, sizeof(rightBuffer) - 1, format, ap);
|
|
|
|
|
|
|
|
std::string LogMessage(leftBuffer);
|
|
|
|
|
|
|
|
LogMessage += " ";
|
|
|
|
|
|
|
|
LogMessage += rightBuffer;
|
|
|
|
|
|
|
|
PrintLog(LogMessage, level);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
|
|
std::string _path;
|
|
|
|
|
|
|
|
int _printMethod;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Log lg;
|
|
|
|
|