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

佛山外包网站建设电子商务网站建设与运维论文

佛山外包网站建设,电子商务网站建设与运维论文,哪有网页设计公司,wordpress太简单目录 一、概念 二、可变参数 三、日志系统 一、概念 一个正在运行的程序或系统就像一个哑巴#xff0c;一旦开始运行我们很难知晓其内部的运行状态。 但有时在程序运行过程中#xff0c;我们想知道其内部不同时刻的运行结果如何#xff0c;这时一个日志系统可以有效的帮…目录 一、概念 二、可变参数 三、日志系统 一、概念 一个正在运行的程序或系统就像一个哑巴一旦开始运行我们很难知晓其内部的运行状态。 但有时在程序运行过程中我们想知道其内部不同时刻的运行结果如何这时一个日志系统可以有效的帮助我们监控程序的运行状态。 如果系统或程序发生了错误或存在bug通过日志的内容我们也可以很快的知道故障的原因并定位错误的位置 一个成熟的日志至少需要包含以下信息 日志时间日志等级 根据情况可将日志划分为不同的等级例如常规信息、警告信息、严重错误、致命错误、调试信息 日志内容文件名称或行号 二、可变参数 日志的内容需要我们指定格式并传参而参数的个数是不确定的。因此在学习编写日志系统之前我们先了解一下可变参数的用法 以下是对可变参数进行操作时需要用到的函数/宏 #include stdarg.hvoid va_start(va_list ap, last); type va_arg(va_list ap, type); void va_end(va_list ap);我们以一个可以同时累加多个变量的函数为例 int sum(int n, ...) {} 形参在实例化时会从右向左进行压栈也就是说多个参数在函数栈帧中是连续的因此我们可以通过地址的偏移来依次访问到所有的参数 首先 int sum(int n, ...) {va_list s;va_start(s, n); } 其中va_list实际上就是char* 而va_start可以让s指向参数n的下一个参数也就是可变参数的第一个参数的位置。此时我们就有了获取第一个参数内容的前提 这也是为什么printf等支持可变参数的函数中必须至少要有一个确定的参数有了该参数才能找到可变参数的起始地址 int sum(int n, ...) {va_list s;va_start(s, n);int sum 0;while(n--){sum va_arg(s, int);}va_end(s);return sum; }其中va_arg传入s和可变参数的类型用于提取s指向的参数并且移动s到下一个参数的位置 va_end将s置为空 测试效果 拓展问题如果可变参数中不同参数有不同的类型怎么办 这也是为什么printf的第一个参数需要传入一个用于控制格式的字符串通过遍历字符串就能知道可变参数中有哪些类型了 三、日志系统 本文实现的日志系统具备以下功能  包含日志等级、日志时间、日志内容将日志功能封装成类并重载了函数调用运算符可以选择将日志输出到终端、输出到同一文件或按照日志等级分类输出到不同文件用户可自定义日志内容格式 如果要让日志包含文件名和行号则可以通过宏定义__FILE__和__LINE__获取文件名和行号 接下来是完整代码附注释 #pragma once#include iostream #include time.h #include unistd.h #include sys/types.h #include sys/stat.h #include fcntl.h #include stdarg.h// 日志等级 #define Info 0 #define Debug 1 #define Warning 2 #define Error 3 #define Fatal 4#define SIZE 1024 // 缓冲区大小// 日志的输出方式 #define Screen 1 // 输出到显示器 #define Same_file 2 // 输出到同一文件 #define Diff_file 3 // 按照等级输出到不同文件#define Filename log.txtclass Log { public:Log(){_method Screen; // 默认输出到显示器}void output(int method) // 更改输出方式{_method method;}std::string level2string(int level) // 日志等级转换字符串{switch (level){case Info:return Info;case Debug:return Debug;case Warning:return Warning;case Error:return Error;case Fatal:return Fatal;default:return None;}}void operator()(int level, const char *format, ...){va_list s;va_start(s, format); // s指向可变参数messagehandle(level, format, s);}void messagehandle(int level, const char *format, va_list s) // 整合日志字符串{time_t t time(nullptr); // 获取时间戳struct tm *ctime localtime(t); // 将时间戳转换为时间char levelAndtime[SIZE]; // 日志等级和时间部分snprintf(levelAndtime, sizeof(levelAndtime), [%s][%d-%d-%d %02d:%02d:%02d], level2string(level).c_str(),ctime-tm_year 1900, ctime-tm_mon 1, ctime-tm_mday, ctime-tm_hour, ctime-tm_min, ctime-tm_sec);char content[SIZE]; // 用户自定义的内容部分vsnprintf(content, sizeof(content), format, s);va_end(s);char message[SIZE * 2]; // 整合所有部分snprintf(message, sizeof(message), %s %s\n, levelAndtime, content);OutputLog(level, message); // 将整合后的日志输出}void OutputLog(int level, const std::string logmessage){switch (_method) // 根据输出方式进行调整{case Screen: // 输出到显示器std::cout logmessage std::endl;break;case Same_file: // 输出到同一文件SamefileOutput(Filename, logmessage);break;case Diff_file: // 输出到不同文件DiffileOutput(level, logmessage);break;default:break;}}void SamefileOutput(const std::string filename, const std::string logmessage){int fd open(filename.c_str(), O_WRONLY | O_CREAT | O_APPEND, 0666); //打开文件if(fd 0) //打开失败return;write(fd, logmessage.c_str(), logmessage.size()); //写入日志close(fd); //关闭文件描述符}void DiffileOutput(int level, const std::string logmessage){std::string filename Filename;filename .;filename level2string(level); //根据日志等级调整文件名SamefileOutput(filename, logmessage); //复用SamefileOutput函数}~Log(){}private:int _method; // 输出方式 }; 测试 向显示器输出日志n%5用于模拟不同日志等级 向同一文件中输出日志 向不同文件中输出日志 完.
http://www.hkea.cn/news/14555948/

相关文章:

  • 网站怎么做微信登录界面北京地铁建设管理公司网站
  • 大淘客网站是怎么做的网站素材免费下载
  • 大连网站推广工具创建网站
  • 电脑维修网站模板下载网站设计 侵权
  • 世纪兴网站建设保定百度推广排名
  • 网站平台建设做好公司宣传wordpress内页链接可打开首页错误
  • 杭州市住房和城乡建设厅网站做网站 杭州
  • 自己做的网站 kindle唐河网站制作
  • 做分销商城网站的网站开发所得税
  • wordpress如何本地安装插件拼多多标题优化软件
  • 平面设计可以做网站办公室设计报价
  • 网站建设需要提供哪些信息阿里云电影网站建设教程
  • 营销型网站托管如何做企业网站推广产品
  • 导航网站备案微网站建设方向
  • 导购网站开发 源码宝塔 wordpress
  • 酒店微信网站建设网络营销外包团队哪些好
  • 建设项目竣工验收网站wordpress视屏播放器
  • 账号注册网站mvc5网站开发用户注册
  • 随县住房和城乡建设局网站页面设计怎么写
  • 哪些网站是营销型网站及原因做kegg的网站
  • 公司网站建设计划书网页制作策划路程怎么写
  • 个人网站 模版 后台管理系统长沙网站建设qq交流群
  • 创办一个网站多少钱网站开发信息平台项目总结
  • 郑州做网站加密的公司资讯网站模板带会员投稿功能
  • wordpress数据库文件导入福永网站优化
  • 东莞做营销型网站的推广公司好做吗
  • 网站推广员工作咋样wordpress 调用用户名
  • 企业网站实名认证怎么做wordpress安装工信部备案
  • centos做网站服务器建设部网站人员查询
  • 哪里有建设网站中的视频下载wordpress售后退货插件