Ai
1 Star 0 Fork 0

加法器+/Linux

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
log.hpp 3.27 KB
一键复制 编辑 原始数据 按行查看 历史
加法器+ 提交于 2024-02-04 14:26 +08:00 . udp套接字
#pragma once
#include <iostream>
#include <stdarg.h>
#include <ctime>
#include<sys/types.h>
#include<sys/stat.h>
#include<sys/fcntl.h>
#include<unistd.h>
#define Info 0
#define Debug 1
#define Warning 2
#define Error 3
#define Fatal 4
#define SIZE 1024
#define Screen 1
#define Onefile 2
#define Classfile 3
#define LogFile "log.txt"
class Log
{
public:
Log()
{
printMethod = Screen;
path = "./log/";
}
void Enable(int method)
{
printMethod = method;
}
std::string levelToString(int level)
{
switch(level)
{
case Info:
return "Info";
case Debug:
return "Debug";
case Warning:
return "Warning";
case Error:
return "Error";
case Fatal:
return "Fatal";
default:
return "None";
}
}
void printLog(int level, std::string logtxt)
{
switch(printMethod)
{
case Screen:
std::cout << logtxt;
break;
case Onefile:
printOnefile(LogFile, logtxt);
break;
case Classfile:
printClassfile(level, logtxt);
break;
default:
break;
}
}
void printOnefile(const std::string &logName, const std::string &logtxt)
{
std::string _logName = path + logtxt;
int fd = open(_logName.c_str(), O_CREAT | O_WRONLY | O_APPEND, 0666);
if(fd < 0) return;
write(fd,logtxt.c_str(),logtxt.size());
close(fd);
}
void printClassfile(int level, std::string logtxt)
{
std::string fileNmae = LogFile;
fileNmae += ".";
fileNmae += levelToString(level);
printOnefile(fileNmae,logtxt);
}
void operator()(int level, const char *format, ...) // 可变参数
{
time_t t = time(nullptr);
struct tm *ctime = localtime(&t);
char leftbuffer[SIZE] = {0};
snprintf(leftbuffer, sizeof(leftbuffer), "[%s][%d-%d-%d-%d:%d:%d]",levelToString(level).c_str(),
ctime->tm_year+1900,ctime->tm_mon+1,ctime->tm_mday,
ctime->tm_hour,ctime->tm_min,ctime->tm_sec);
va_list s;
va_start(s,format);
char rightbuffer[SIZE]={0};
vsnprintf(rightbuffer,sizeof(rightbuffer),format,s);
va_end(s);
//日志格式:默认+自定义部分
char logtxt[SIZE]={0};
snprintf(logtxt,sizeof(logtxt),"%s %s\n",leftbuffer,rightbuffer);
//std::cout << logtxt << std::endl;
printLog(level,logtxt);
// std::cout << time(nullptr) << std::endl;
}
~Log()
{}
private:
int printMethod;
std::string path;
};
//////////////////////////////////////////////////////
/* 形参从右向左入栈
n最后入栈实例化
可变参数列表必须要有一个实参,用于找到起始地址
栈 自顶向下 高地址 --> 低地址
*/
//////////////////////////////////////////////////////
// n代表有几个值
void sum(int n, ...)
{
va_list s; // char*
va_start(s, n);
int sum = 0;
while (n)
{
sum += va_arg(s, int);
n--;
}
va_end(s); // s = nullptr
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/PYH_2001/linux.git
git@gitee.com:PYH_2001/linux.git
PYH_2001
linux
Linux
master

搜索帮助