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

办公司流程和费用长春网站快照优化公司

办公司流程和费用,长春网站快照优化公司,淘宝装修可以做代码的网站有哪些,广州网站建设是什么一#xff0c;模块主要成员 该模块的主要作用是对日志消息进行格式化#xff0c;将日志消息组织成制定格式的字符串。 该模块主要成员有两个#xff1a;1.格式化字符串。 2.格式化子项数组 1.1 格式化字符串 格式化字符串的主要功能是保存日志输出的格式字符串。其格式化字…一模块主要成员 该模块的主要作用是对日志消息进行格式化将日志消息组织成制定格式的字符串。 该模块主要成员有两个1.格式化字符串。 2.格式化子项数组 1.1 格式化字符串 格式化字符串的主要功能是保存日志输出的格式字符串。其格式化字符主要有下面几种 格式化字符串定义了日志的输出格式而格式化字符更有助于用户自由的控制日志的输出格式 。这里要注意的是由于我们信息中的日期为时间戳因此在设置其格式化字符时还应设置对应的子格式化字符如[%d{%H:%M:%S}]指的是按照年月日输出时间 1.2 格式化子项数组 格式化子项数组:用于按顺序保存格式化字符串对应的子格式化对象(FormatItem类)。 那么什么是子格式化类(FormatItem类)?子格式化类主要负责日志消息子项的获取以及格式化其下包含诸多子类通过继承关系实现多态即使是不同的子类也能依靠多态由相同的父类指针指向从而保存到同一个vector中Formatltem主要有以下子类: 格式化字符以及格式化子项的关系如下这里我们以日期为例子 1.3 举例说明 例子:[%d{%H:%M:%S}] %m%n pattern [%d{%H:%M:%S}] %m%n items {{OtherFormatItem(), [},{TimeFormatItem(), %H:%M:%S},{OtherFormatItem(), ]},{MsgFormatItem (), },{NLineFormatItem (), } } message msg {size_t _line 22;size_t _ctime 12345678;std::thread::id _tid 0x12345678;std::string _logger logger;std::string _file main.cpp;std::string _payload 创建套接字失败;LogLevel::level _level ERROR; };格式化的过程其实就是按次序从Msg中取出需要的数据进⾏字符串的连接的过程。 最终组织出来的格式化消息 [22:32:54] 创建套接字失败\n 二代码实现 2.1 代码 核心代码bool AnalyPattern()的分析如下 #ifndef _M_FORMAT_H_ #define _M_FORMAT_H_#include level.hpp #include message.hpp #include util.hpp #include vector #include memory #include sstreamnamespace mjwlog {// 格式化子项基类class Formatlem{public:using ptrstd::shared_ptrFormatlem;virtual void format(std::ostream os, const message msg) 0;};// 格式化子项子类// 日期类子类class TimeFormatlem : public Formatlem{public:TimeFormatlem(std::string format%H:%M:%S):_fromat(format){}void format(std::ostream os, const message msg) override{struct tm time;localtime_r((time_t*)msg._time,time);char str[32];strftime(str,sizeof(str)-1,_fromat.c_str(),time);osstr;}private:std::string _fromat;//用来控制输出格式};//缩进子类class TabFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{os\t;}};//线程id子类class ThreadFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{osmsg._id;}};//日志级别子类class LevelFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{osLogLevel::LeveltoString(msg._level);}};//日志器名称子类class NameFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{osmsg._logger;}};//文件名子类class CFileFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{osmsg._filename;}};//行号子类class CLineFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{osmsg._line;}};//日志消息主体子类class MsgFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{osmsg._msg;}};//换行子类class NLineFormatlem : public Formatlem{public:void format(std::ostream os, const message msg) override{os\n;}};//其他字符子类直接原路返回class OtherFormatlem : public Formatlem{public:OtherFormatlem(std::string str):_str(str){}void format(std::ostream os, const message msg) override{os_str;}private:std::string _str;};//格式化类class Formatter{/*%d 日期%T 缩进%t 线程id%p 日志级别%c 日志器名称%f 文件名%l 行号%m 日志消息%n 换行*/public://默认格式:时间{年-月-日 时:分:秒}缩进 线程ID 缩进 [日志级别] 缩进 [日志器名称] 缩进 文件名:行号 缩进 消息换行Formatter(std::string pattern[%d{%H:%M:%S}]%T[%t]%T[%p]%T[%c]%T[%f:%l]%T%n):_pattern(pattern){}//对msg进行格式化nvoid format(std::ostream os,const message msg)//将格式化后的内容写入os执行流{if(AnalyPattern()){for(auto it:_items){it-format(os,msg);}}}std::string format(const message msg)//将格式化后的内容以string方式返回{std::stringstream str;if(AnalyPattern()){for(auto it:_items){it-format(str,msg);}}return str.str();}//对格式化字符串进行分析bool AnalyPattern(){//遍历_parttern进行逐一分析int cur0;std::string key,val;//abc[%%d{%H:%M:%S}]while(cur_pattern.size()){//先排查非格式化字符如abcif(_pattern[cur]!%){val_pattern[cur];//特殊情况:aaaa[%%d{%H:%M:%S}]if(cur_pattern.size()){_items.push_back(createItem(key,val));}continue;}//到这一步说明碰到%,这是需要排除%[ %%等情况//%[//if(_pattern[cur]%_pattern[cur1]%)if(_pattern[cur]%(!isalpha(_pattern[cur1]))){val_pattern[cur];//特殊情况:aaaa[%%d{%H:%M:%S}%/* if(cur_pattern.size()){_items.push_back(createItem(key,val));} */continue;}//此时key为空val中全是非格式化字符字符//不过也有可能val中没有任何字符if(!val.empty()) _items.push_back(createItem(key,val));key.clear();val.clear();//cur1_pattern.size()if(cur1_pattern.size()){std::cout格式化字符关键字%后数据错误std::endl;return false;}//到这一步说明目前cur指向%,且cur1指向的为一个字母字符curcur1;key_pattern[cur];//abc[%%d{%H:%M:%S}],此时cur指向d后面的{//因此这时候我们需要判断后面是否是子格式化字符if(cur_pattern.size()_pattern[cur]{){cur;while(cur_pattern.size()_pattern[cur]!}){val_pattern[cur];}//出while循环有下面两种可能//1.cur_pattern.size(),说明没有找到},说明这是非法子格式化字符if(cur_pattern.size()){std::cout非法子格式化字符....std::endl;abort();}//2._pattern[cur]}_items.push_back(createItem(key,val));key.clear();val.clear();//此时cur指向}因此进入下一个循环前cur应该cur;}else{_items.push_back(createItem(key,val));key.clear();val.clear();}}return true;}private://根据不同的格式创建不同的格式化子类对象//key用来存储格式化字符val用来存储格式化字符子字符如[%d{%H:%M:%S}]std::shared_ptrFormatlem createItem(const std::string key,const std::string val){if(keyd) return Formatlem::ptr(new TimeFormatlem(val));if(keyT) return Formatlem::ptr(new TabFormatlem());if(keyp) return Formatlem::ptr(new LevelFormatlem());if(keyt) return Formatlem::ptr(new ThreadFormatlem());if(keyc) return Formatlem::ptr(new NameFormatlem());if(keyf) return Formatlem::ptr(new CFileFormatlem());if(keyl) return Formatlem::ptr(new CLineFormatlem());if(keyn) return Formatlem::ptr(new NLineFormatlem());//当key为空时则说明val里存储的是非格式化化字符如abcdif(key.empty()) return Formatlem::ptr(new OtherFormatlem(val));//还有一种情况就是key中存储的不是设定的格式字符如%gstd::cout没有该格式化字符%keystd::endl;abort();return nullptr;}private:std::string _pattern;std::vectorFormatlem::ptr _items;}; }#endif 3.1 测试
http://www.huolong8.cn/news/28005/

相关文章:

  • html成品网站网站首页动画代码
  • 网上购物商城系统论文上海排名优化seo
  • 做设计兼职网站招代理商的网站
  • 网站怎么做备案建网站自己做服务器
  • 网站成品下载梧州吧
  • 贵阳网站空间企业微信公众号开发
  • 手机网站弹窗酒泉网站建设费用
  • 自学网站建设最快要多久手机做网页的软件有哪些
  • 微信菜单怎么做微网站西安做网站选哪家好
  • 最好用的crm大连seo整站优化
  • 深圳宝安做网站的ps怎么做电商网站
  • 欧美风网站建设wap端是电脑还是手机
  • 广告网站推荐外贸网站建设可以吗
  • 网站建设基础包括网站上广告
  • 网站功能型和展示型的区别做网站鼎盛
  • 青海 住房和建设厅网站分享网站友情链接
  • 百度回收网站搭建杭州网络整合营销公司
  • 建立网站心得个人网站建设如何赚钱
  • 住房城乡建设部 网站本科毕业 做网站编辑
  • 网站如何设定关键词网页界面设计总结与体会
  • 做网站用什么语言和工具系统门户网站建设常用功能
  • 商丘住房和城乡建设网站美的集团网站建设
  • html语言中文解释大全 | 网站建设 - 红黑联盟论坛国内外贸公司前十名
  • 域名购买成功后怎么做网站网站开发第三方支付
  • 长沙做个网站多少钱郑州做网站推广价格
  • 怎么从网站知道谁做的最大的网站
  • 视觉网站建设dw做的网站怎样做成手机版的
  • 有什么做任务的网站吗做网站解析要多久
  • 机械行业网站 方案二次开发源代码
  • 珠海手机网站建设公司wordpress模版仿制