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

成都访问公司网站关键词提取

成都访问公司网站,关键词提取,分享站wordpress主题,运营招聘不讲理论,直接上在程序中可用代码: 一、引入Boost模块 开发环境:Visual Studio 2017 Boost库版本:1.68.0 安装方式:Nuget 安装命令: #只安装下面几个即可 Install-package boost -version 1.68.0 Install…

不讲理论,直接上在程序中可用代码:
一、引入Boost模块

开发环境:Visual Studio 2017
Boost库版本:1.68.0
安装方式:Nuget
安装命令:

#只安装下面几个即可
Install-package boost -version 1.68.0
Install-package boost_filesystem-vc141 -version 1.68.0
Install-package boost_log_setup-vc141 -version 1.68.0
Install-package boost_log-vc141 -version 1.68.0#这里是其他模块,可不安装
Install-package boost_atomic-vc141 -version 1.68.0
Install-package boost_chrono-vc141 -version 1.68.0
Install-package boost_date_time-vc141 -version 1.68.0
Install-package boost_system-vc141 -version 1.68.0
Install-package boost_thread-vc141 -version 1.68.0
Install-package boost_locale-vc141 -version 1.68.0

调用Nuget控制台:

 

二、引入下面两个hpp文件
boost_logger.hpp

#pragma once#include <string>
#include <fstream>
#include <iostream>
#include <boost/filesystem.hpp>
#include <boost/smart_ptr/shared_ptr.hpp>
#include <boost/core/null_deleter.hpp>
#include <boost/log/core.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/sinks/async_frontend.hpp>
#include <boost/log/sinks/text_ostream_backend.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/support/date_time.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/attributes/current_thread_id.hpp>
#include <boost/log/attributes/current_process_name.hpp>
#include <boost/log/attributes/attribute.hpp>
#include <boost/log/attributes/attribute_cast.hpp>
#include <boost/log/attributes/attribute_value.hpp>
#include <boost/log/sinks/async_frontend.hpp>// Related headersQDebug
#include <boost/log/sinks/unbounded_fifo_queue.hpp>
#include <boost/log/sinks/unbounded_ordering_queue.hpp>
#include <boost/log/sinks/bounded_fifo_queue.hpp>
#include <boost/log/sinks/bounded_ordering_queue.hpp>
#include <boost/log/sinks/drop_on_overflow.hpp>
#include <boost/log/sinks/block_on_overflow.hpp>//这里是logger的头文件,后面根据实际路径引入
#include "logger.hpp"//引入各种命名空间
namespace logging = boost::log;
namespace src = boost::log::sources;
namespace expr = boost::log::expressions;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;
namespace attrs = boost::log::attributes;
//建立日志源,支持严重属性
thread_local static boost::log::sources::severity_logger<log_level> lg;#define BOOST_LOG_Q_SIZE 1000//创建输出槽:synchronous_sink是同步前端,允许多个线程同时写日志,后端无需考虑多线程问题
typedef sinks::asynchronous_sink<sinks::text_file_backend, sinks::bounded_fifo_queue<BOOST_LOG_Q_SIZE, sinks::block_on_overflow>> sink_t;
static std::ostream &operator<<(std::ostream &strm, log_level level)
{static const char *strings[] ={"debug","info","warn","error","critical"};if (static_cast<std::size_t>(level) < sizeof(strings) / sizeof(*strings))strm << strings[level];elsestrm << static_cast<int>(level);return strm;
}
class boost_logger : public logger_iface
{
public:boost_logger(const std::string& dir) : m_level(log_level::error_level), dir(dir){}~boost_logger(){}/*** 日志初始化*/void init() override{//判断日志文件所在路径是否存在if (boost::filesystem::exists(dir) == false){boost::filesystem::create_directories(dir);}//添加公共属性logging::add_common_attributes();//获取日志库核心core = logging::core::get();//创建后端,并设值日志文件相关控制属性boost::shared_ptr<sinks::text_file_backend> backend = boost::make_shared<sinks::text_file_backend>(keywords::open_mode = std::ios::app, // 采用追加模式keywords::file_name = dir + "/%Y%m%d_%N.log", //归档日志文件名keywords::rotation_size = 10 * 1024 * 1024, //超过此大小自动建立新文件keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0), //每隔指定时间重建新文件keywords::min_free_space = 100 * 1024 * 1024  //最低磁盘空间限制);if (!_sink){_sink.reset(new sink_t(backend));//向日志源添加槽core->add_sink(_sink);}//添加线程ID公共属性core->add_global_attribute("ThreadID", attrs::current_thread_id());//添加进程公共属性core->add_global_attribute("Process", attrs::current_process_name());//设置过滤器_sink->set_filter(expr::attr<log_level>("Severity") >= m_level);// 如果不写这个,它不会实时的把日志写下去,而是等待缓冲区满了,或者程序正常退出时写下// 这样做的好处是减少IO操作,提高效率_sink->locked_backend()->auto_flush(true); // 使日志实时更新//这些都可在配置文件中配置_sink->set_formatter(expr::stream<< "["<< expr::attr<std::string>("Process") << ":" << expr::attr<attrs::current_thread_id::value_type>("ThreadID") << ":"<< expr::attr<unsigned int>("LineID") << "]["<< expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") << "]["<< expr::attr<log_level>("Severity") << "] "<< expr::smessage);}/*** 停止记录日志*/void stop() override{warn_log("boost logger stopping");_sink->flush();_sink->stop();core->remove_sink(_sink);}/*** 设置日志级别*/void set_log_level(log_level level) override{m_level = level;if (_sink){_sink->set_filter(expr::attr<log_level>("Severity") >= m_level);}}log_level get_log_level() override{return m_level;}void debug_log(const std::string &msg) override{BOOST_LOG_SEV(lg, debug_level) << msg << std::endl;}void info_log(const std::string &msg) override{BOOST_LOG_SEV(lg, info_level) << blue << msg << normal << std::endl;}void warn_log(const std::string &msg) override{BOOST_LOG_SEV(lg, warn_level) << yellow << msg << normal << std::endl;}void error_log(const std::string &msg) override{BOOST_LOG_SEV(lg, error_level) << red << msg << normal << std::endl;}void critical_log(const std::string &msg) override{BOOST_LOG_SEV(lg, critical_level) << red << msg << normal << std::endl;}private:log_level m_level;boost::shared_ptr<logging::core> core;boost::shared_ptr<sink_t> _sink;//日志文件路径const std::string& dir;
};

logger.hpp

#pragma once
#define BOOST_ALL_DYN_LINK#include <string>   // std::string
#include <iostream> // std::cout
#include <fstream>
#include <sstream> // std::ostringstream
#include <memory>typedef std::basic_ostringstream<char> tostringstream;
static const char black[] = {0x1b, '[', '1', ';', '3', '0', 'm', 0};
static const char red[] = {0x1b, '[', '1', ';', '3', '1', 'm', 0};
static const char yellow[] = {0x1b, '[', '1', ';', '3', '3', 'm', 0};
static const char blue[] = {0x1b, '[', '1', ';', '3', '4', 'm', 0};
static const char normal[] = {0x1b, '[', '0', ';', '3', '9', 'm', 0};
#define ACTIVE_LOGGER_INSTANCE (*activeLogger::getLoggerAddr())
// note: this will replace the logger instace. If this is not the first time to set the logger instance.
// Please make sure to delete/free the old instance.
#define INIT_LOGGER(loggerImpPtr)              \{                                           \ACTIVE_LOGGER_INSTANCE = loggerImpPtr;    \ACTIVE_LOGGER_INSTANCE->init();           \}
#define CHECK_LOG_LEVEL(logLevel) (ACTIVE_LOGGER_INSTANCE ? ((ACTIVE_LOGGER_INSTANCE->get_log_level() <= log_level::logLevel##_level) ? true : false) : false)
#define SET_LOG_LEVEL(logLevel)                                                   \{                                                                              \if (ACTIVE_LOGGER_INSTANCE)                                                  \(ACTIVE_LOGGER_INSTANCE->set_log_level(log_level::logLevel##_level));      \}
#define DESTROY_LOGGER                      \{                                        \if (ACTIVE_LOGGER_INSTANCE)            \{                                      \ACTIVE_LOGGER_INSTANCE->stop();      \delete ACTIVE_LOGGER_INSTANCE;       \}                                      \}enum log_level
{debug_level = 0,info_level,warn_level,error_level,critical_level
};class logger_iface
{
public:logger_iface(void) = default;virtual ~logger_iface(void) = default;logger_iface(const logger_iface &) = default;logger_iface &operator=(const logger_iface &) = default;public:virtual void init() = 0;virtual void stop() = 0;virtual void set_log_level(log_level level) = 0;virtual log_level get_log_level() = 0;virtual void debug_log(const std::string &msg) = 0;virtual void info_log(const std::string &msg) = 0;virtual void warn_log(const std::string &msg) = 0;virtual void error_log(const std::string &msg) = 0;virtual void critical_log(const std::string &msg) = 0;
};class activeLogger
{
public:static logger_iface **getLoggerAddr(){static logger_iface *activeLogger;return &activeLogger;}
};#define __LOGGING_ENABLED#ifdef __LOGGING_ENABLED
#define __LOG(level, msg)                                                       \\{                                                                            \tostringstream var;                                                        \var << "[" << __FILE__ << ":" << __LINE__ << ":" << __func__ << "] \n"     \<< msg;                                                                  \if (ACTIVE_LOGGER_INSTANCE)                                                \ACTIVE_LOGGER_INSTANCE->level##_log(var.str());                          \}
#else
#define __LOG(level, msg)
#endif /* __LOGGING_ENABLED */

三、使用样例

#include "logger/boost_logger.hpp"
#include "logger/simpleLogger.hpp"void testCustomLogger() {//初始化日志对象:日志路径后期从配置文件读取const std::string logDir = "E:\\log";INIT_LOGGER(new boost_logger(logDir));//设置过滤级别(可以读取配置文件)SET_LOG_LEVEL(debug);//输出各级别日志,(void *)ACTIVE_LOGGER_INSTANCE:代表激活的日志实例(可不写)__LOG(critical, "hello logger!"<< "this is critical log" << (void *)ACTIVE_LOGGER_INSTANCE);__LOG(debug, "hello logger!!!!!!!!!!!!!!!"<< "this is debug log");
}


文章转载自:
http://wanjiafurphy.spfh.cn
http://wanjiaforceless.spfh.cn
http://wanjiachristiana.spfh.cn
http://wanjiaachech.spfh.cn
http://wanjiadrumstick.spfh.cn
http://wanjiaquadrable.spfh.cn
http://wanjiaseclusively.spfh.cn
http://wanjiabedlamite.spfh.cn
http://wanjiasemilogarithmic.spfh.cn
http://wanjiaaeolis.spfh.cn
http://wanjialeachable.spfh.cn
http://wanjiasipunculan.spfh.cn
http://wanjiaeutomous.spfh.cn
http://wanjiamodel.spfh.cn
http://wanjiaphidian.spfh.cn
http://wanjiacaniniform.spfh.cn
http://wanjiaofficialism.spfh.cn
http://wanjiaconsolidate.spfh.cn
http://wanjiadebride.spfh.cn
http://wanjiasonorization.spfh.cn
http://wanjiaskean.spfh.cn
http://wanjiapalliation.spfh.cn
http://wanjialocalism.spfh.cn
http://wanjiaprovencal.spfh.cn
http://wanjiabakelite.spfh.cn
http://wanjiazygophyte.spfh.cn
http://wanjiajugula.spfh.cn
http://wanjiatractarianism.spfh.cn
http://wanjiaassiut.spfh.cn
http://wanjiapotsdam.spfh.cn
http://wanjiapoliteness.spfh.cn
http://wanjiamucinolytic.spfh.cn
http://wanjiaselenomorphology.spfh.cn
http://wanjiagasifiable.spfh.cn
http://wanjiaagrimony.spfh.cn
http://wanjiaunmutilated.spfh.cn
http://wanjiatarpaulin.spfh.cn
http://wanjiaemissive.spfh.cn
http://wanjiacommittal.spfh.cn
http://wanjialazyitis.spfh.cn
http://wanjiaviyella.spfh.cn
http://wanjiasymptom.spfh.cn
http://wanjiagreenpeace.spfh.cn
http://wanjiainaptness.spfh.cn
http://wanjialateenrigged.spfh.cn
http://wanjiasuperhuman.spfh.cn
http://wanjiazeitgeist.spfh.cn
http://wanjiasarod.spfh.cn
http://wanjiabrer.spfh.cn
http://wanjiaaffranchise.spfh.cn
http://wanjiapolyautography.spfh.cn
http://wanjiaplatina.spfh.cn
http://wanjiaxenomorphic.spfh.cn
http://wanjiaoutcross.spfh.cn
http://wanjiabrogue.spfh.cn
http://wanjiagelatinous.spfh.cn
http://wanjiaslanchways.spfh.cn
http://wanjialode.spfh.cn
http://wanjiacosily.spfh.cn
http://wanjialeucine.spfh.cn
http://wanjiagastight.spfh.cn
http://wanjiatenaculum.spfh.cn
http://wanjiaexacting.spfh.cn
http://wanjiabravura.spfh.cn
http://wanjiascopa.spfh.cn
http://wanjiaprosperity.spfh.cn
http://wanjiaworldly.spfh.cn
http://wanjiamyrrhic.spfh.cn
http://wanjiacotillion.spfh.cn
http://wanjiaremediation.spfh.cn
http://wanjiaabirritant.spfh.cn
http://wanjiabodoni.spfh.cn
http://wanjiaengild.spfh.cn
http://wanjiabenzaldehyde.spfh.cn
http://wanjiasnockered.spfh.cn
http://wanjiamethionine.spfh.cn
http://wanjiadiathermancy.spfh.cn
http://wanjiagentlehood.spfh.cn
http://wanjiainburst.spfh.cn
http://wanjianoshery.spfh.cn
http://www.15wanjia.com/news/128228.html

相关文章:

  • 网站上的文章做参考文献百度一下你就知道首页
  • 从化哪里做网站好互联网推广是干什么的
  • 网易那个网站可以做字幕适合40岁女人的培训班
  • 临沂网站建设步骤百度小说搜索风云榜排行榜
  • 做粤菜的视频网站苏州网站seo优化
  • 广州市企业网站建设怎么样怎么注册网址
  • 互联网网站建设计划书百度霸屏推广一般多少钱
  • 深圳专业优定软件网站建设天津优化加盟
  • 自己建设博客网站泰州网站建设优化
  • 蛋糕网站制作答辩百度运营公司
  • 做网站的需求甘肃seo技术
  • 注册工商企业石家庄网站优化
  • 网站的二级网页关键词百度网址是什么
  • 网站建设ktv南昌网站设计
  • 响应式网站 移动端网站免费网页设计制作网站
  • 商品价格网哪里有seo排名优化
  • wordpress导航栏代码生哥seo博客
  • 营销网站建设免费如何做广告宣传与推广
  • 重庆网页制作工作室关键词优化seo优化
  • 做网站 php asp.net jsp网络营销环境宏观微观分析
  • 南昌英文网站建设seo推广营销靠谱
  • 做商品网站数据库有哪些阿里云域名查询
  • 自己做衣服的网站潍坊网站建设
  • 重庆王网站制作免费二级域名生成网站
  • 柏乡企业做网站台州关键词首页优化
  • 平湖有做网站得吗百度seo优化
  • 做网站团队网络营销企业网站优化
  • 做网站运营的股票网络营销外包推广
  • 分类信息网站如何做排名微信营销工具
  • html5高端网站建设织梦模板google 浏览器