news 2026/6/4 1:04:50

YaoEngine DEV Log log系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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__);

好吧这真的很语塞因为根本就很简单,没必要讲吼吼吼吼吼,每次看都会被这个愚蠢的解析器气笑,我会在这个下面提交修改的代码。之前没注意,甚至于没有删除这两个变量,不过静态变量始终是从程序开始就会到程序死亡,所以没必要删除吼吼吼吼吼,骗你的。

下次再修改吧,洗澡睡觉了,本来想再写一个,想想算了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/4 1:04:39

flask框架——02 授权(Token存储文件中)

2.1 在PowerShell中输入&#xff1a; python3 import uuid uuid.uuid4() 2.2 在项目中新建db.txt&#xff0c;内容如下&#xff1a; cb2fc704-700f-4146-a15f-8a2c619b5a36,李扬 69a8f140-43c2-4541-b207-73feb3822092,张三 2.3 复制v2.py&#xff0c;重命名为v3.py&…

作者头像 李华
网站建设 2026/6/4 1:03:59

深度测评:GEO内容监控,到底能不能提升AI搜索引擎引用率?

深度测评&#xff1a;GEO内容监控&#xff0c;到底能不能提升AI搜索引擎引用率&#xff1f;精心准备的内容&#xff0c;在AI搜索中却无人引用&#xff1f;这不是内容质量的问题&#xff0c;而是缺少一套有效的监控与优化机制。根据对当前主流AI搜索引擎&#xff08;包括Perplex…

作者头像 李华
网站建设 2026/6/4 0:57:46

第30章:AI辅助ZK证书验证(链上)——Groth16证明验证实战

本章你将收获:零知识证明(ZKP)核心概念(Groth16协议、证明/验证流程);Circom电路编写与编译;使用SnarkJS生成Groth16证明和Solidity验证器;在链上验证ZK证书(ZK Certificate)——让用户在不透露隐私数据的情况下证明自己满足条件(如年龄、白名单、资质);AI辅助编写…

作者头像 李华
网站建设 2026/6/4 0:57:21

WSL 2内存占用太高?手把手教你用.wslconfig文件精细调优,告别卡顿

WSL 2内存优化全攻略&#xff1a;从原理到实战的深度调优手册每次打开任务管理器看到WSL 2的内存占用飙到80%以上&#xff0c;是不是感觉自己的开发机突然变成了老古董&#xff1f;这种卡顿不仅影响编码效率&#xff0c;更会打断好不容易进入的"心流"状态。不同于传统…

作者头像 李华
网站建设 2026/6/4 0:55:38

2026云端AI爆发,端侧AI崛起能否改变计算产业40年叙事?

云端AI爆发&#xff0c;端侧AI入局2026年&#xff0c;云端AI迎来爆发&#xff0c;“token”成为全行业焦点。但产业链上的玩家逐渐意识到&#xff0c;AI不会只长在云上。首届科技联合创始人郭萌明称“智能体一体机已经很热闹了”&#xff0c;业界看到几乎所有主流芯片企业、传统…

作者头像 李华