YaoEngine DEV Log log系统
·
哈哈哈哈哈哈哈,实在懒得写了,这是直接找到了之前有心情写的log。ok我会抽空所有代码上传到github
https://github.com/yanan-0604/YaoEngine-DEV

怎么样,是不是很唬人,总体来说他只是记不清是什么时候写的这个了。总之非常垃圾的代码,之后会优化他,

YaoLog放着整个模块的代码,而Log则是使用他们的demo,


#pragma once
#include "../YaoLogcore.h"
#include<iostream>
#include<chrono>
namespace YaoEngine {
namespace LogSystem {
class base_formatter {
public:
virtual ~base_formatter()=default;
virtual void Log(const char*) = 0;
};
class string_formatter :public base_formatter {
public:
string_formatter(char str) { m_Str = str; }
virtual ~string_formatter() {}
virtual void Log(const char*) override { std::cout << m_Str; }
private:
char m_Str;
};
class Timer_formatter :public base_formatter {
public:
Timer_formatter(Timetype t = Timetype::None) { m_time = t; };
virtual ~Timer_formatter() {};
virtual void Log(const char*) override
{
auto time = std::chrono::system_clock::now();
std::time_t t = std::chrono::system_clock::to_time_t(time);
std::tm localTime;
#ifdef _WIN32
localtime_s(&localTime, &t);
#else
localtime_r(&t, &localTime);
#endif
// 分别取出年月日时分秒
int year = localTime.tm_year + 1900; // 从1900开始
int month = localTime.tm_mon + 1; // 从0开始
int day = localTime.tm_mday;
int hour = localTime.tm_hour;
int minute = localTime.tm_min;
int second = localTime.tm_sec;
switch (m_time)
{
case Timetype::Year:
std::cout << year;
break;
case Timetype::Month:
std::cout << month;
break;
case Timetype::Day:
std::cout << day;
break;
case Timetype::Hour:
std::cout << hour;
break;
case Timetype::Min:
std::cout << minute;
break;
case Timetype::Seconds:
std::cout << second;
break;
default:
std::cout << "error code";
break;
}
}
public:
Timetype m_time;
};
class Level_formatter :public base_formatter {
public:
Level_formatter(Level l = Level::None) { m_level = l; }
virtual ~Level_formatter() {};
virtual void Log(const char*) override { std::cout << LevelToString(m_level); }
private:
Level m_level;
};
/*class EntityId_formatter :public base_formatter {
public:
virtual void Log(const char*) override;
};*/
class msg_formatter :public base_formatter {
public:
msg_formatter() {};
virtual ~msg_formatter() {};
virtual void Log(const char*msg) override { std::cout << msg; }
};
}
}
#include"Logger.h"
#include<Mysystem/Windowtool/Windowstool.h>
namespace YaoEngine {
namespace LogSystem {
Logger::Logger(const char *name, Level l)
{
m_name = name;
m_level = l;
m_formatterarray = {};
}
Logger::~Logger()
{
}
void Logger::parseformat(const char *fmt)
{
if (fmt == nullptr)
{
return;
}
std::string formatstr = fmt;
for (int i = 0; i < formatstr.size(); i++)
{
if (formatstr[i]!='%')
{
m_formatterarray.emplace_back(new string_formatter(formatstr[i]));
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'Y')
{
m_formatterarray.emplace_back(new Timer_formatter(Timetype::Year));
i++;
}
else if(formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'M')
{
m_formatterarray.emplace_back(new Timer_formatter(Timetype::Month));
i++;
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'D')
{
m_formatterarray.emplace_back(new Timer_formatter(Timetype::Day));
i++;
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'h')
{
m_formatterarray.emplace_back(new Timer_formatter(Timetype::Hour));
i++;
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'm')
{
m_formatterarray.emplace_back(new Timer_formatter(Timetype::Min));
i++;
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] =='s')
{
m_formatterarray.emplace_back(new Timer_formatter(Timetype::Seconds));
i++;
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'l')
{
m_formatterarray.emplace_back(new Level_formatter(m_level));
}
else if (formatstr[i] == '%' && i + 1 < formatstr.size() && formatstr[i + 1] == 'v')
{
m_formatterarray.emplace_back(new msg_formatter());
i++;
}
}
}
void Logger::Resetformat(const char* fmt)
{
}
void Logger::SetLevel(Level l)
{
m_level = l;
}
void Logger::Log(const char* msg, ...)
{
va_list args;
char buffer[1024];
va_start(args, msg);
vsnprintf(buffer, sizeof(buffer), msg, args);
va_end(args);
switch (m_level)
{
case Level::Trace:
ConsleCommand::SetFreeColor(1);
break;
case Level::Debug:
ConsleCommand::SetFreeColor(2);
break;
case Level::Info:
ConsleCommand::SetFreeColor(3);
break;
case Level::Warn:
ConsleCommand::SetFreeColor(4);
break;
case Level::Error:
ConsleCommand::SetFreeColor(5);
break;
case Level::Fatal:
ConsleCommand::SetFreeColor(6);
break;
default:
std::cout<<"Invalid Level"<<std::endl;
break;
}
std::cout<<m_name<<": ";
for (auto& formatter : m_formatterarray)
{
formatter->Log(buffer);
}
std::cout << std::endl;
ConsleCommand::SetFreeColor(15);
}
}
}
#include"./Log.h"
namespace YaoEngine {
namespace LogSystem {
Logger* YLog::YaoEngine = new Logger("YaoEngine");
Logger* YLog::client = new Logger("cilent");
}
}
#pragma once
#include"YaoLog/Logger.h"
namespace YaoEngine
{
namespace LogSystem {
class YLog {
public:
static void Init() {
YaoEngine->parseformat("[%Y-%M-%D, %h:%m:%s]:%v");
client->parseformat("[%Y-%M-%D, %h:%m:%s]:%v");
}
static Logger* GetYaoEngineLog() { return YaoEngine; }
static Logger* GetclientLog() { return client; }
private:
static Logger* YaoEngine;
static Logger* client;
};
}
}
#define YaoInfo(msg, ...)\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->SetLevel(YaoEngine::LogSystem::Level::Info);\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->Log(msg, ##__VA_ARGS__);
#define Yaoerror(msg, ...)\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->SetLevel(YaoEngine::LogSystem::Level::Error);\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->Log(msg, ##__VA_ARGS__);
#define YaoWarning(msg, ...)\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->SetLevel(YaoEngine::LogSystem::Level::Warn);\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->Log(msg, ##__VA_ARGS__);
#define YaoDebug(msg, ...)\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->SetLevel(YaoEngine::LogSystem::Level::Debug);\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->Log(msg, ##__VA_ARGS__);
#define YaoTrace(msg, ...)\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->SetLevel(YaoEngine::LogSystem::Level::Trace);\
YaoEngine::LogSystem::YLog::GetYaoEngineLog()->Log(msg, ##__VA_ARGS__);
#define clientInfo(msg, ...)\
YaoEngine::LogSystem::YLog::GetclientLog()->SetLevel(YaoEngine::LogSystem::Level::Info);\
YaoEngine::LogSystem::YLog::GetclientLog()->Log(msg, ##__VA_ARGS__);
#define clienterror(msg, ...)\
YaoEngine::LogSystem::YLog::GetclientLog()->SetLevel(YaoEngine::LogSystem::Level::Error);\
YaoEngine::LogSystem::YLog::GetclientLog()->Log(msg, ##__VA_ARGS__);
#define clientWarning(msg, ...)\
YaoEngine::LogSystem::YLog::GetclientLog()->SetLevel(YaoEngine::LogSystem::Level::Warn);\
YaoEngine::LogSystem::YLog::GetclientLog()->Log(msg, ##__VA_ARGS__);
#define clientDebug(msg, ...)\
YaoEngine::LogSystem::YLog::GetclientLog()->SetLevel(YaoEngine::LogSystem::Level::Debug);\
YaoEngine::LogSystem::YLog::GetclientLog()->Log(msg, ##__VA_ARGS__);
好吧这真的很语塞因为根本就很简单,没必要讲吼吼吼吼吼,每次看都会被这个愚蠢的解析器气笑,我会在这个下面提交修改的代码。之前没注意,甚至于没有删除这两个变量,不过静态变量始终是从程序开始就会到程序死亡,所以没必要删除吼吼吼吼吼,骗你的。
下次再修改吧,洗澡睡觉了,本来想再写一个,想想算了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)