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

关于网站建设领导分工下面不属于网络推广方法

关于网站建设领导分工,下面不属于网络推广方法,网站建设网站需要什么,微网站制作功能:将格式化完成后的日志消息字符串,输出到指定的位置 扩展:支持同时将日志落地到不同的位置 位置分类: 1.标准输出 2.指定文件(时候进行日志分析) 3.滚动文件(文件按照时间/大小进行滚动…

功能:将格式化完成后的日志消息字符串,输出到指定的位置

扩展:支持同时将日志落地到不同的位置

位置分类:

1.标准输出

2.指定文件(时候进行日志分析)

3.滚动文件(文件按照时间/大小进行滚动切换)

扩展:支持落地方向的扩展

        用户可以自己编写一个新的落地模块,将日志进行其他方向的落地。

 实现思想

1.抽象出一个落地基类

2.之后根据落地方向从基类派生出不同落地方向的子类

3.使用工厂模式进行创建与表示分离

标准输出

class StdoutSink :public LogSink{public:void log(const char* data,size_t len)override{std::cout.write(data,len);}};

输入到指定文件

class FileSink :public LogSink{public://传入文件路径,并且打开文件FileSink(const std::string& pathname):_pathname(pathname){//创建日志文件所在的目录util::File::createDirectory(util::File::path(pathname));//创建并打开日志文件_ofs.open(_pathname,std::ios::binary|std::ios::app);assert(_ofs.is_open());//判断文件是否打开}//将日志消息输入到文件里面void log(const char* data,size_t len)override{_ofs.write(data,len);assert(_ofs.good());}private:std::string _pathname;std::ofstream _ofs;};

以大小进行滚动

class RollBySizeSink :public LogSink{public://传入文件路径,并且打开文件RollBySizeSink(const std::string& basename,size_t max_size):_basename(basename),_max_fsize(max_size),_cur_fsize(0){std::string pathname = createNewFile();//创建日志文件所在的目录util::File::createDirectory(util::File::path(pathname));//创建并打开日志文件_ofs.open(pathname,std::ios::binary|std::ios::app);assert(_ofs.is_open());//判断文件是否打开}//写入前判断文件大小,超过了最大大小就要切换文件void log(const char* data,size_t len)override{if(_cur_fsize>= _max_fsize){std::string pathname = createNewFile();_ofs.close();//关闭原来已经打开的文件。_ofs.open(pathname,std::ios::binary|std::ios::app);assert(_ofs.is_open());_cur_fsize = 0;}_ofs.write(data,len);assert(_ofs.good());_cur_fsize += len;}private:std::string createNewFile(){//获取系统时间,以时间来构造文件扩展名time_t t = util::Date::now();struct tm lt;localtime_r(&t,&lt);//将时间戳转换为有年月日的结构std::stringstream filename;filename << _basename;filename << lt.tm_year+1900;filename << lt.tm_mon+1;filename << lt.tm_mday;filename << lt.tm_hour;filename << lt.tm_min;filename << lt.tm_sec;filename << "-";filename <<_name_count++;filename << ".log";return filename.str();}//进行大小判断,超过指定大小就要切换新文件private://基础文件名+扩展文件名(时间生成)组成一个实际的当前输出文件名size_t _name_count=0;std::string _basename;std::ofstream _ofs;size_t _max_fsize;//记录最大大小,当前文件超过了这个大小就要切换文件size_t _cur_fsize;//记录当前文件已经写入的大小};

以时间进行滚动

enum class TimeGap{GAP_SECOND,GAP_MIUTE,GAP_HOUR,GAP_DAY,
};class RollByTimeSink :public bitlog::LogSink{public://传入文件路径,并且打开文件RollByTimeSink(const std::string& basename,TimeGap gap_type):_basename(basename){switch(gap_type){case TimeGap::GAP_SECOND:_gap_size = 1;break;case TimeGap::GAP_MIUTE:_gap_size = 60;break;case TimeGap::GAP_HOUR:_gap_size = 3600;break;case TimeGap::GAP_DAY:_gap_size = 3600*24;break;}_cur_gap = _gap_size == 1 ? bitlog::util::Date::now() : bitlog::util::Date::now() % _gap_size;std::string filename = createNewFile();//创建日志文件所在的目录bitlog::util::File::createDirectory(bitlog::util::File::path(filename));//创建并打开日志文件_ofs.open(filename,std::ios::binary|std::ios::app);assert(_ofs.is_open());//判断文件是否打开}//写入前判断文件大小,超过了最大大小就要切换文件void log(const char* data,size_t len)override{time_t cur =bitlog::util::Date::now();if((cur%_gap_size)!=_cur_gap){_ofs.close();std::string filename = createNewFile();_ofs.open(filename,std::ios::binary|std::ios::app);assert(_ofs.is_open());}_ofs.write(data,len);assert(_ofs.good());}private:std::string createNewFile(){//获取系统时间,以时间来构造文件扩展名time_t t = bitlog::util::Date::now();struct tm lt;localtime_r(&t,&lt);//将时间戳转换为有年月日的结构std::stringstream filename;filename << _basename;filename << lt.tm_year+1900;filename << lt.tm_mon+1;filename << lt.tm_mday;filename << lt.tm_hour;filename << lt.tm_min;filename << lt.tm_sec;filename << ".log";return filename.str();}//进行大小判断,超过指定大小就要切换新文件private:std::string _basename;std::ofstream _ofs;size_t _cur_gap;//当前是第几个时间段size_t _gap_size;//时间段的大小};

使用简易工厂模式来创建

class SinkFactory{public:template<typename SinkType,typename ...Args>static LogSink::ptr create(Args &&...args){return std::make_shared<SinkType>(std::forward<Args>(args)...);}};


文章转载自:

http://2vRUVrGM.kstLm.cn
http://hdBsHSpj.kstLm.cn
http://ntoUnqQT.kstLm.cn
http://RIGd4vPj.kstLm.cn
http://v84dWIF1.kstLm.cn
http://SRxe1Im1.kstLm.cn
http://XNawLF6I.kstLm.cn
http://2AKyOFdm.kstLm.cn
http://eLvhDBaN.kstLm.cn
http://QnDDlYgS.kstLm.cn
http://b0soURh0.kstLm.cn
http://AkBQFtyF.kstLm.cn
http://ZiKCrXE9.kstLm.cn
http://DeHfm9yr.kstLm.cn
http://zwKFqsOm.kstLm.cn
http://y6NGKmEa.kstLm.cn
http://6LzJvjLU.kstLm.cn
http://cQDgEIHN.kstLm.cn
http://gW6FUA6O.kstLm.cn
http://CHmHKAuy.kstLm.cn
http://QrDb8Vhb.kstLm.cn
http://IfKkhGIf.kstLm.cn
http://PuZ5bJ0q.kstLm.cn
http://BO2twCjJ.kstLm.cn
http://z76hCow9.kstLm.cn
http://maqVDPAN.kstLm.cn
http://SYgSm8iW.kstLm.cn
http://RwO2IhVj.kstLm.cn
http://GQE5Q7bo.kstLm.cn
http://Zjmhvflu.kstLm.cn
http://www.dtcms.com/wzjs/679008.html

相关文章:

  • wordpress网站关键词有什么网站可以做平面兼职
  • 从哪些方面进行网站建设聊城网站建设电话
  • 电商网站的功能公司建网站怎么做
  • 培训医院网站建设杭州网络公司有哪些
  • 济南网站设计建设php网站集成支付宝接口
  • 东营建设网站公司电话号码金华网站建设yw126
  • 做网站需要学php哪些技术成都建设信息网官网
  • 外贸开发产品网站建设中国移动官方官网
  • 课程建设网站设计源码龙口有没有做网站的
  • 购物网站运营html5个人主页制作代码
  • 网站功能设计方案全网营销公司
  • 如何查询网站的备案号wordpress火车
  • 网站显示图片标记站长之家app下载
  • 创建手机网站泰安房产信息网上查询系统
  • 网站建设的数字化和互联网化浙江省建设监理协会网站
  • asp.net的网站开发做网站需要花费那方面的钱
  • 所有搜索引擎蜘蛛不来网站了建一个营销网站的步骤
  • 网站营销方法中国商标网官方查询网站
  • 重庆合川企业网站建设联系电话wordpress固定链自定义结构
  • 做网站前的准备关键词seo公司
  • 宝山手机网站制作公司中国建筑室内设计师网
  • 开封市建设局网站宣传推广方式
  • 网站添加微信支付河南男科医院排名榜
  • 遂宁住房和城乡建设厅网站三明市建设局网站
  • 昆山做网站优化少儿编程自学网站
  • 宣传网站怎么做的wordpress 新建一个页面
  • 美食网站开发的目的和意义建设网站证书查询
  • 想要自己做一个网站怎么做大兴模版网站开发公司哪家好
  • 深圳哪家网站建设关于建设学校网站的报告
  • 闸北网站建设公司邹城市网站建设