当前位置: 首页 > news >正文

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__);

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

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

http://www.rkmt.cn/news/1457072.html

相关文章:

  • AI推高存储芯片价格,曾经市值超120亿美元的运动相机鼻祖GoPro能否活下去?
  • Claude Code 完全实战指南 - 第五章:常用 Skill 推荐与最佳实践
  • 别错过机会!2026实测好用的AI写作辅助软件|实测必入避坑版
  • BOBST 704-1123-04 PQ4882 PC板线轴
  • Diff Checker:三分钟掌握文本差异对比的终极免费工具
  • 毕业季福音:2026年亲测好用的8个免费降AI神器,附对比测评
  • 利用LuaMacros与AutoHotkey将旧键盘改造为自定义宏键盘
  • 暗影精灵8装Ubuntu双系统,我踩过的NVIDIA显卡坑和黑屏修复全记录
  • HBase 与 Hadoop 安装与上手使用全指导
  • 工业应用需高强度耐磨合金?揭秘高品质Inconel 718生产厂家的实力 - 品牌2026
  • 2026年最新AI论文平台全攻略(含保姆级操作教程)
  • 51单片机RS485全双工通信仿真套件(Keil5源码+Proteus DSN+多场景例程)
  • 设计走查表与设计还原度优化:像素级精准的工程实践
  • [智能体-240]:LangChain实现MCP工具调用的代码示例(MCP client端)
  • 2026年 速冻蔬菜基地/5000亩蔬菜基地供应商推荐榜单:绿色生态种植与冷链保鲜实力典范 - 品牌企业推荐师(官方)
  • 把开发环境装进U盘:用WTG打造一个即插即用的Python/数据分析移动工作站
  • 2026年隧道陶钢复合板厂家推荐榜:重庆装饰陶钢板/铝陶钢复合板/隧道用钢石板/铝钙板品牌深度解析 - 品牌企业推荐师(官方)
  • 实测才敢推!2026年靠谱AI论文工具榜单,免费款也能高效产初稿
  • Jina Reader:当AI拥有互联网之眼,你的LLM将看到怎样的世界?
  • 雁过留痕:撤销15秒留痕规则
  • 别再只引入`fastjson2`了!Spring 6整合FastJson2必须知道的三个Maven依赖
  • OpenClaw从入门到应用——CLI:设备
  • 终极风扇控制神器:FanControl让你的电脑告别噪音与过热烦恼
  • 从Viterbi到PSP:手把手教你用Python仿真逐幸存路径处理算法
  • 杭州中职院校实力排行:杭州宠物护理专业技校/杭州技校/杭州数字媒体专业技校/杭州新能源专业技校/杭州无人机专业技校/选择指南 - 优质品牌商家
  • 2026年当下宜兴评价高的端庄大气婚宴旗袍推荐:这5家值得信赖 - 2026年企业资讯
  • 如何彻底解决电脑风扇噪音问题:FanControl智能风扇控制终极指南
  • 2026年齐齐哈尔电子智能化工程直销厂家甄选指南 - 2026年企业资讯
  • 2026年 新鲜蔬菜厂家/批发商推荐榜:南通、海门、江苏出口级速冻蔬菜及食堂预制菜优质供应商精选 - 品牌企业推荐师(官方)
  • 高硬度耐磨不锈钢哪里买?17-4PH/SUS630优质货源推荐 - 品牌2026