免费建网站空间,wordpress 导入md,wordpress注册页面修改,光明新区住房和建设局 官方网站第三代软件开发-控制台输出彩虹日志 文章目录 第三代软件开发-控制台输出彩虹日志项目介绍控制台输出彩虹日志实现原理真实代码 总结 关键字#xff1a;
Qt、
Qml、
关键字3、
关键字4、
关键字5 项目介绍 欢迎来到我们的 QML C 项目#xff01;这个项目结合了 QM…
第三代软件开发-控制台输出彩虹日志 文章目录 第三代软件开发-控制台输出彩虹日志项目介绍控制台输出彩虹日志实现原理真实代码 总结 关键字
Qt、
Qml、
关键字3、
关键字4、
关键字5 项目介绍 欢迎来到我们的 QML C 项目这个项目结合了 QMLQt Meta-Object Language和 C 的强大功能旨在开发出色的用户界面和高性能的后端逻辑。 在项目中我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件我们能够迅速开发出丰富多样的界面效果和动画效果。同时我们利用 QML 强大的集成能力轻松将 C 的底层逻辑和数据模型集成到前端界面中。 在后端方面我们使用 C 编写高性能的算法、数据处理和计算逻辑。C 是一种强大的编程语言能够提供卓越的性能和可扩展性。我们的团队致力于优化代码减少资源消耗以确保我们的项目在各种平台和设备上都能够高效运行。 无论您是对 QML 和 C 开发感兴趣还是需要我们为您构建复杂的用户界面和后端逻辑我们都随时准备为您提供支持。请随时联系我们让我们一同打造现代化、高性能的 QML C 项目 重要说明☝
☀该专栏在第三代软开发更新完将涨价
控制台输出彩虹日志
真实截图这里因为没有警告致命错误所以颜色有点单一。 为啥有搞这花里胡哨的内容了其实是为了调试方便看了我前面日志系统的小伙伴可能有影响我日志的实现实际就是劫持了Qt的控制台输出了而开发到后期有大量的日志已经记录到里面了如果都是一个颜色的话那真是不好区分。最一开始调试的时候其实是按照Debug和Release来区分的就是如果是Debug模式运行就在控制台输出如果是Release运行就存储到我们的日志数据库中。到了现在那一启动用户信息、系统运行信息、调试信息真的是眼花缭乱在中间过程的时候还可以使用--------------------------------------------------或者 AAAAAAAAAAAAAAAAAAAAAAA等做风格但是多了真的就不好搞了所以决定搞彩虹日志这样就可以比如绿色就是用户信息黄色就是系统信息我们的调试信息可以是蓝色或者其他颜色。
这里我们可以先看一个Demo
#include QtCore
#include iostreamvoid printRainbowLog(const QString message)
{QStringList rainbowColors {\033[91m, \033[93m, \033[92m, \033[96m, \033[94m, \033[95m};static int index 0;std::cout rainbowColors.at(index).toStdString() message.toStdString() \033[0m std::endl;// 轮换彩虹颜色index (index 1) % rainbowColors.size();
}int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);printRainbowLog(红色日志);printRainbowLog(黄色日志);printRainbowLog(绿色日志);printRainbowLog(青色日志);printRainbowLog(蓝色日志);printRainbowLog(紫色日志);return a.exec();
}实现原理
其实就是使用了ANSI转义码来实现彩虹颜色的效果。具体来说我们使用了不同的转义码来设置输出文本的颜色。例如\033[91m表示设置颜色为红色\033[93m表示设置颜色为黄色依此类推。然后我们将这些带有转义码的颜色字符串与要输出的日志信息拼接在一起并通过std::cout控制台输出流输出。
请注意控制台是否支持和如何支持ANSI转义码取决于你所使用的终端或控制台。上面的示例可能在一些运行环境中不能正常显示彩虹颜色。
真实代码
下面是我业务中的真实代码其实我是把这个做了裁剪的了。重点就是switch里面的Case分支语句在Debug模式下通过srd::cout输出到控制台。
/*** brief XXXX::saveLogData 日志数据库线程*/
void XXXX::saveLogData()
{// 开启事务模式m_logDB-beginTransaction();while (true){if(!m_queueLogData.isEmpty()){m_mutex.lock();LogData logData m_queueLogData.dequeue();QtMsgType type logData.msgType;m_listLog logData.strLog.split($);m_mutex.unlock();switch(type){default:break;case QtDebugMsg: //log debug{m_messageType 输出;
#ifdef QT_DEBUGstd::cout QString(\033[32m logData.strLog \033[0m).toLocal8Bit().constData() std::endl;
#endifbreak;}case QtInfoMsg: // info{m_messageType 消息;
#ifdef QT_DEBUGstd::cout QString(\033[33m logData.strLog \033[0m).toLocal8Bit().constData() std::endl;
#endifbreak;}case QtWarningMsg: // warn{
#ifdef QT_DEBUGstd::cout QString(\033[34m logData.strLog \033[0m).toLocal8Bit().constData() std::endl;
#endifm_messageType 警告;break;}case QtCriticalMsg: // error{
#ifdef QT_DEBUGstd::cout QString(\033[35m logData.strLog \033[0m).toLocal8Bit().constData() std::endl;
#endifm_messageType 严重;break;}case QtFatalMsg:{
//#ifdef QT_DEBUG
// std::cout QString(\033[31m logData.strLog \033[0m).toLocal8Bit().constData() std::endl;
//#endifm_messageType 致命;break;}}if(m_listLog.count() 8){continue;}m_logData.m_timeStamp m_listLog.at(1);m_logData.m_messageType m_messageType;m_logData.m_Infor m_listLog.at(3);m_logData.m_Infor m_logData.m_Infor.replace(QRegularExpression(\n, QRegularExpression::CaseInsensitiveOption), );m_logData.m_fileName m_listLog.at(4);m_logData.m_functionName m_listLog.at(5);m_logData.m_CurrentLine m_listLog.at(6);m_logData.m_ThreadID m_listLog.at(7);m_mutexTimer.lock();m_dbState m_logDB-insert(m_logData);m_insterNumber;if(m_insterNumber%10000 0){m_logDB-commitTransaction();m_insterNumber 0;}m_mutexTimer.unlock();}else{// 日志线程退出将缓存数据全部读出if(!m_logThread){closeDB();emit signalExitThread();break;}// 缓存读空时线程休眠节约性能等待下一次数据读取QThread::msleep(10);}}
}总结
今天的这个说难不难所简单也不简单代码很简单但是知道很难。其实我觉得任何带我开世界的人都应该被感恩小时候父母带我们看精彩世界上学时老师给我们讲解世界的繁华工作中同时给我们的新世界等等所以能接触到彩虹日志也要感谢一个人。 关于彩虹日志的文章
https://jaredtao.github.io/2019/04/29/%E7%8E%A9%E8%BD%ACQt(1)-%E8%BE%93%E5%87%BA%E5%BD%A9%E8%89%B2log/这里我只是说使用了其中的一丢丢详细的可以看涛哥的博客写的非常详细。