当前位置: 首页 > 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.jsqmd.com/news/945593/

相关文章:

  • AI推高存储芯片价格,曾经市值超120亿美元的运动相机鼻祖GoPro能否活下去?
  • 现代Web开发:架构演进和前沿实践
  • 对话AI潜空间结构化:从混沌到可控生成的核心技术与实践
  • 【项目11】基于图像分割实现一键抠图
  • 别再只盯着电路板了!EMC测试中,线束布局与屏蔽的‘玄学’与科学(附汽车电子案例)
  • BOBST 704-1116-03电源板模块
  • VMware里给Ubuntu虚拟机改完网卡就启动失败?一个磁盘挂载脚本帮你彻底解决
  • 2026年门店小程序和小程序的区别
  • 【Git 工程实践】从命令原理到团队协作工作流全解析
  • LeetCode 三道高频中等数组算法详解|除自身乘积、矩阵置零、螺旋矩阵
  • DDD-014:工厂(Factory)
  • 别再被AI检测卡脖子!8个免费降AI率工具盘点(2026最新亲测版)
  • 别再被Docker镜像下载卡住了!手把手教你配置阿里云镜像加速(CentOS 7实战)
  • Text2SQL 实战:让业务人员用自然语言查询数据库
  • 实战构建基于Hyperledger Fabric V2.5的企业级分布式溯源系统架构
  • BOBST 704-1123-04 PQ4882 PC板线轴
  • 别错过机会!2026实测好用的AI写作辅助软件|实测必入避坑版
  • Claude Code 完全实战指南 - 第五章:常用 Skill 推荐与最佳实践
  • Diff Checker:三分钟掌握文本差异对比的终极免费工具
  • OpenVoiceV2技术解析:语音克隆架构设计与实战指南
  • 毕业季福音:2026年亲测好用的8个免费降AI神器,附对比测评
  • [智能体-239]:MCP 给 LangChain 工具体系带来的增量价值(立足原有本地 Tool 机制做增量)
  • 利用LuaMacros与AutoHotkey将旧键盘改造为自定义宏键盘
  • 摆脱论文困扰! AI论文写作软件测评:2026最新推荐与对比
  • AFE断线检测的两种主流方案对比:LTC68xx电流源 vs MAX14920电阻分压,到底怎么选?
  • 暗影精灵8装Ubuntu双系统,我踩过的NVIDIA显卡坑和黑屏修复全记录
  • DIY三孔插座测试器:低成本电路设计与安全检测指南
  • BOBST C23-01 102022-0704141601控制器模块
  • HBase 与 Hadoop 安装与上手使用全指导
  • 2026年最新AI论文平台全攻略(含保姆级操作教程)