区块链技术博客
www.b2bchain.cn

工欲善其事系列之一 :超级简洁方便的C++日志输出方案(MFC、Qt等小伙伴也可看过来)求职学习资料

本文介绍了工欲善其事系列之一 :超级简洁方便的C++日志输出方案(MFC、Qt等小伙伴也可看过来)求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

  • 工欲善其事系列简介
  • 前言
  • C++中标准输出方式:
  • 问题的提出
  • 如何实现
    • 单个变量的实现
      • 宏 “#” 的妙用
      • 显示文件名、函数、行号
      • 设置打印颜色

工欲善其事系列简介

常言道:工欲善其事,必先利其器!
在效率第一的现在,有一些好的工具,势必事半功倍。
在代码中,时常有大量且重复的东西要加入,我们应该尽可能多的将时间、经历放在技术中。
有时候前进一小步,在大量的工作中节省的时间就很可观了。
这也是我做这的初衷,并且在此过程中,还能巩固一些知识。希望能够帮助到大家。

工欲善其事系列将会陆续分享一些关于我常用到的工具,干货满满,欢迎大家关注。

前言

在繁杂的项目中,日志打印必不可少。但是编写打印的工作,有时候是无趣的、繁琐的、浪费精力的。
如何能够快速、方便的编写打印;如何清晰、准确的定位;如何简单并优雅的实现;最后才能让我们摆脱这样枯燥的、重复的工作?
网上有很多强大的日志类工具,我也都使用过一些,有时候也并没有理想中的方便。今天我想分享给大家的一套我自己的解决方案。
这篇文章中涉及到的东西是在以后文章中可能出现的头文件之一,命名为:“logger.h”

C++中标准输出方式:

对于单个变量输出,可以如下方式:

int delay = 5; std::cout << "delay:" << delay << std::endl;

对于多变量信息输出则需要如下方式:

#include <iostream> using namespace std;  int main(int argc, char **argv) {     char *Name = "Bill";     int Age = 10;     float Score = 86.5;     float Height = 121.3;     float Body_Weight = 36;      std::cout << "Name:" << Name << ", "               << "Age:" << Age << ", "               << "Score:" << Score << ", "               << "Height:" << Height << ", "               << "Body_Weight:" << Body_Weight << std::endl; }

问题的提出

大家可以看见,需要添加很多对应变量名的字符串,导致写一次打印,非常耗时间。
我一直在想有没有更好的解决方案,形如 logOut(a, b, c, d); 这样简单方便的输出方式?
最后经过不断探索终于找到了一份这样的解决方案,而且只需要加入一个头文件即可,代码如下:

#include "logger.h"  int main(int argc, char **argv) {     char *Name = "Bill";     int Age = 10;     float Score = 86.5;     float Height = 121.3;     float Body_Weight = 36;      logDebug(Name, Age, Score, Height, Body_Weight); }

输出结果:

DEBUG [..cppdemomain.cpp@main#11]Name:Bill, Age:10, Score:86.5, Height:121.3, Body_Weight:36

工欲善其事系列之一 :超级简洁方便的C++日志输出方案(MFC、Qt等小伙伴也可看过来)

大家可能注意到了,背景图的内容就是这个,还有Info、Warn、Error并对应不同颜色输出。

如何实现

那么对于以上效果,如何才能实现呢?
下面我将带领大家一步一步讲解我的心路历程与解决方案。这样也容易让大家了理解其中原理。

单个变量的实现

究其根本,就是减少对变量名称字符串的输入,但是打印的时候能够对应显示,便于我们分析。
对于单个变量,我很早就想到,用过宏“#”就可以轻松实现。

宏 “#” 的妙用

如果熟悉c++宏的小伙伴,可能知道里面有个“#”的用法,可以将对应的参数变成字符串,效果如下:

#define  toStr(x)  #x  char *str = toStr(hello);   //  等价于  char *str = "hello";

那么对于单个变量最简单的宏实现方式就是:

#define logs(x)  std::cout << #x":" << x << std::endl;  ...  int delay = 5; int other = 3;  logs(delay); logs(other);

输出结果:

delay:5
other:3

显示文件名、函数、行号

对于想要显示文件位置信息,c++中也有对应的宏,分别是__FILE__ 、 __FUNCTION__ 、 __LINE__ ;
只需要做如下改动即可。

#define FILE_INFO   "[" << __FILE__ << '@' << __FUNCTION__ << '#' << __LINE__  << "]" #define logs(x)     std::cout << FILE_INFO << #x":" << x << std::endl  ...  int delay = 5; int other = 3;  logs(delay); logs(other);

输出结果:

[..cppdemomain.cpp@main#21]delay:5
[..cppdemomain.cpp@main#22]other:3

设置打印颜色

大家都知道在Linux使用 ls 命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?
在bash中,通常我们可以使用echo命令加-e选项输出各种颜色的文本,例如:

echo -e "33[31mRed Text33[0m" echo -e "33[32mGreen Text33[0m" echo -e "33[33mYellow Text33[0m" echo -e "33[34mBlue Text33[0m" echo -e "33[35mMagenta Text33[0m" echo -e "33[36mCyan Text33[0m"

其中:”33[31m”、”33[31m”、”33[0m”等是ANSI转义序列(ANSI escape code/sequence),它控制文本输出的格式、颜色等。

格式 :   33[显示方式;字体颜色;背景颜色m 中间是变颜色的内容 33[0m

其中各个参数意义如下:

字体色            背景色           颜色 --------------------------------------------- 30                40              黑色 31                41              红色 32                42              绿色 33                43              黃色 34                44              蓝色 35                45              紫红色 36                46              青蓝色 37                47              白色  显示方式           意义 ----------------------------------- 0                终端默认设置 1                高亮显示 4                使用下划线 5                闪烁 7                反白显示 8                不可见

那么添加颜色就可以如下处理:
“`

  • 工欲善其事系列简介
  • 前言
  • C++中标准输出方式:
  • 问题的提出
  • 如何实现
    • 单个变量的实现
      • 宏 “#” 的妙用
      • 显示文件名、函数、行号
      • 设置打印颜色

工欲善其事系列简介

常言道:工欲善其事,必先利其器!
在效率第一的现在,有一些好的工具,势必事半功倍。
在代码中,时常有大量且重复的东西要加入,我们应该尽可能多的将时间、经历放在技术中。
有时候前进一小步,在大量的工作中节省的时间就很可观了。
这也是我做这的初衷,并且在此过程中,还能巩固一些知识。希望能够帮助到大家。

工欲善其事系列将会陆续分享一些关于我常用到的工具,干货满满,欢迎大家关注。

前言

在繁杂的项目中,日志打印必不可少。但是编写打印的工作,有时候是无趣的、繁琐的、浪费精力的。
如何能够快速、方便的编写打印;如何清晰、准确的定位;如何简单并优雅的实现;最后才能让我们摆脱这样枯燥的、重复的工作?
网上有很多强大的日志类工具,我也都使用过一些,有时候也并没有理想中的方便。今天我想分享给大家的一套我自己的解决方案。
这篇文章中涉及到的东西是在以后文章中可能出现的头文件之一,命名为:“logger.h”

C++中标准输出方式:

对于单个变量输出,可以如下方式:

int delay = 5; std::cout << "delay:" << delay << std::endl;

对于多变量信息输出则需要如下方式:

#include <iostream> using namespace std;  int main(int argc, char **argv) {     char *Name = "Bill";     int Age = 10;     float Score = 86.5;     float Height = 121.3;     float Body_Weight = 36;      std::cout << "Name:" << Name << ", "               << "Age:" << Age << ", "               << "Score:" << Score << ", "               << "Height:" << Height << ", "               << "Body_Weight:" << Body_Weight << std::endl; }

问题的提出

大家可以看见,需要添加很多对应变量名的字符串,导致写一次打印,非常耗时间。
我一直在想有没有更好的解决方案,形如 logOut(a, b, c, d); 这样简单方便的输出方式?
最后经过不断探索终于找到了一份这样的解决方案,而且只需要加入一个头文件即可,代码如下:

#include "logger.h"  int main(int argc, char **argv) {     char *Name = "Bill";     int Age = 10;     float Score = 86.5;     float Height = 121.3;     float Body_Weight = 36;      logDebug(Name, Age, Score, Height, Body_Weight); }

输出结果:

DEBUG [..cppdemomain.cpp@main#11]Name:Bill, Age:10, Score:86.5, Height:121.3, Body_Weight:36

工欲善其事系列之一 :超级简洁方便的C++日志输出方案(MFC、Qt等小伙伴也可看过来)

大家可能注意到了,背景图的内容就是这个,还有Info、Warn、Error并对应不同颜色输出。

如何实现

那么对于以上效果,如何才能实现呢?
下面我将带领大家一步一步讲解我的心路历程与解决方案。这样也容易让大家了理解其中原理。

单个变量的实现

究其根本,就是减少对变量名称字符串的输入,但是打印的时候能够对应显示,便于我们分析。
对于单个变量,我很早就想到,用过宏“#”就可以轻松实现。

宏 “#” 的妙用

如果熟悉c++宏的小伙伴,可能知道里面有个“#”的用法,可以将对应的参数变成字符串,效果如下:

#define  toStr(x)  #x  char *str = toStr(hello);   //  等价于  char *str = "hello";

那么对于单个变量最简单的宏实现方式就是:

#define logs(x)  std::cout << #x":" << x << std::endl;  ...  int delay = 5; int other = 3;  logs(delay); logs(other);

输出结果:

delay:5
other:3

显示文件名、函数、行号

对于想要显示文件位置信息,c++中也有对应的宏,分别是__FILE__ 、 __FUNCTION__ 、 __LINE__ ;
只需要做如下改动即可。

#define FILE_INFO   "[" << __FILE__ << '@' << __FUNCTION__ << '#' << __LINE__  << "]" #define logs(x)     std::cout << FILE_INFO << #x":" << x << std::endl  ...  int delay = 5; int other = 3;  logs(delay); logs(other);

输出结果:

[..cppdemomain.cpp@main#21]delay:5
[..cppdemomain.cpp@main#22]other:3

设置打印颜色

大家都知道在Linux使用 ls 命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?
在bash中,通常我们可以使用echo命令加-e选项输出各种颜色的文本,例如:

echo -e "33[31mRed Text33[0m" echo -e "33[32mGreen Text33[0m" echo -e "33[33mYellow Text33[0m" echo -e "33[34mBlue Text33[0m" echo -e "33[35mMagenta Text33[0m" echo -e "33[36mCyan Text33[0m"

其中:”33[31m”、”33[31m”、”33[0m”等是ANSI转义序列(ANSI escape code/sequence),它控制文本输出的格式、颜色等。

格式 :   33[显示方式;字体颜色;背景颜色m 中间是变颜色的内容 33[0m

其中各个参数意义如下:

字体色            背景色           颜色 --------------------------------------------- 30                40              黑色 31                41              红色 32                42              绿色 33                43              黃色 34                44              蓝色 35                45              紫红色 36                46              青蓝色 37                47              白色  显示方式           意义 ----------------------------------- 0                终端默认设置 1                高亮显示 4                使用下划线 5                闪烁 7                反白显示 8                不可见

那么添加颜色就可以如下处理:
“`

  • 工欲善其事系列简介
  • 前言
  • C++中标准输出方式:
  • 问题的提出
  • 如何实现
    • 单个变量的实现
      • 宏 “#” 的妙用
      • 显示文件名、函数、行号
      • 设置打印颜色

工欲善其事系列简介

常言道:工欲善其事,必先利其器!
在效率第一的现在,有一些好的工具,势必事半功倍。
在代码中,时常有大量且重复的东西要加入,我们应该尽可能多的将时间、经历放在技术中。
有时候前进一小步,在大量的工作中节省的时间就很可观了。
这也是我做这的初衷,并且在此过程中,还能巩固一些知识。希望能够帮助到大家。

工欲善其事系列将会陆续分享一些关于我常用到的工具,干货满满,欢迎大家关注。

前言

在繁杂的项目中,日志打印必不可少。但是编写打印的工作,有时候是无趣的、繁琐的、浪费精力的。
如何能够快速、方便的编写打印;如何清晰、准确的定位;如何简单并优雅的实现;最后才能让我们摆脱这样枯燥的、重复的工作?
网上有很多强大的日志类工具,我也都使用过一些,有时候也并没有理想中的方便。今天我想分享给大家的一套我自己的解决方案。
这篇文章中涉及到的东西是在以后文章中可能出现的头文件之一,命名为:“logger.h”

C++中标准输出方式:

对于单个变量输出,可以如下方式:

int delay = 5; std::cout << "delay:" << delay << std::endl;

对于多变量信息输出则需要如下方式:

#include <iostream> using namespace std;  int main(int argc, char **argv) {     char *Name = "Bill";     int Age = 10;     float Score = 86.5;     float Height = 121.3;     float Body_Weight = 36;      std::cout << "Name:" << Name << ", "               << "Age:" << Age << ", "               << "Score:" << Score << ", "               << "Height:" << Height << ", "               << "Body_Weight:" << Body_Weight << std::endl; }

问题的提出

大家可以看见,需要添加很多对应变量名的字符串,导致写一次打印,非常耗时间。
我一直在想有没有更好的解决方案,形如 logOut(a, b, c, d); 这样简单方便的输出方式?
最后经过不断探索终于找到了一份这样的解决方案,而且只需要加入一个头文件即可,代码如下:

#include "logger.h"  int main(int argc, char **argv) {     char *Name = "Bill";     int Age = 10;     float Score = 86.5;     float Height = 121.3;     float Body_Weight = 36;      logDebug(Name, Age, Score, Height, Body_Weight); }

输出结果:

DEBUG [..cppdemomain.cpp@main#11]Name:Bill, Age:10, Score:86.5, Height:121.3, Body_Weight:36

工欲善其事系列之一 :超级简洁方便的C++日志输出方案(MFC、Qt等小伙伴也可看过来)

大家可能注意到了,背景图的内容就是这个,还有Info、Warn、Error并对应不同颜色输出。

如何实现

那么对于以上效果,如何才能实现呢?
下面我将带领大家一步一步讲解我的心路历程与解决方案。这样也容易让大家了理解其中原理。

单个变量的实现

究其根本,就是减少对变量名称字符串的输入,但是打印的时候能够对应显示,便于我们分析。
对于单个变量,我很早就想到,用过宏“#”就可以轻松实现。

宏 “#” 的妙用

如果熟悉c++宏的小伙伴,可能知道里面有个“#”的用法,可以将对应的参数变成字符串,效果如下:

#define  toStr(x)  #x  char *str = toStr(hello);   //  等价于  char *str = "hello";

那么对于单个变量最简单的宏实现方式就是:

#define logs(x)  std::cout << #x":" << x << std::endl;  ...  int delay = 5; int other = 3;  logs(delay); logs(other);

输出结果:

delay:5
other:3

显示文件名、函数、行号

对于想要显示文件位置信息,c++中也有对应的宏,分别是__FILE__ 、 __FUNCTION__ 、 __LINE__ ;
只需要做如下改动即可。

#define FILE_INFO   "[" << __FILE__ << '@' << __FUNCTION__ << '#' << __LINE__  << "]" #define logs(x)     std::cout << FILE_INFO << #x":" << x << std::endl  ...  int delay = 5; int other = 3;  logs(delay); logs(other);

输出结果:

[..cppdemomain.cpp@main#21]delay:5
[..cppdemomain.cpp@main#22]other:3

设置打印颜色

大家都知道在Linux使用 ls 命令列出文件列表时,不同的文件类型会用不同的颜色显示。那么如何实现这样带颜色的文本输出呢?
在bash中,通常我们可以使用echo命令加-e选项输出各种颜色的文本,例如:

echo -e "33[31mRed Text33[0m" echo -e "33[32mGreen Text33[0m" echo -e "33[33mYellow Text33[0m" echo -e "33[34mBlue Text33[0m" echo -e "33[35mMagenta Text33[0m" echo -e "33[36mCyan Text33[0m"

其中:”33[31m”、”33[31m”、”33[0m”等是ANSI转义序列(ANSI escape code/sequence),它控制文本输出的格式、颜色等。

格式 :   33[显示方式;字体颜色;背景颜色m 中间是变颜色的内容 33[0m

其中各个参数意义如下:

字体色            背景色           颜色 --------------------------------------------- 30                40              黑色 31                41              红色 32                42              绿色 33                43              黃色 34                44              蓝色 35                45              紫红色 36                46              青蓝色 37                47              白色  显示方式           意义 ----------------------------------- 0                终端默认设置 1                高亮显示 4                使用下划线 5                闪烁 7                反白显示 8                不可见

那么添加颜色就可以如下处理:
“`

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » 工欲善其事系列之一 :超级简洁方便的C++日志输出方案(MFC、Qt等小伙伴也可看过来)求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们