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

做微信推送封面的网站优化seo报价

做微信推送封面的网站,优化seo报价,做网站公司-深圳信科,全屏类网站建设文章目录 补充:日志日志的基本概念日志的实现补充:可变参数的用法可变参数原理可变参数应用 获取时间的方式 日志的应用 补充:日志 日志的基本概念 基础要求: 日志时间、日志等级、日志内容、文件名称和行号等日志等级&#xf…

文章目录

    • 补充:日志
      • 日志的基本概念
      • 日志的实现
        • 补充:可变参数的用法
          • 可变参数原理
          • 可变参数应用
        • 获取时间的方式
      • 日志的应用

补充:日志

日志的基本概念

基础要求:

日志时间、日志等级、日志内容、文件名称和行号等

日志等级:

Info:常规消息
Warming:报警信息
Error:比较严重了,可能需要立即处理
Fatal:致命
debug:调试

日志的实现

补充:可变参数的用法

image-20250413221458357

可变参数原理

image-20250413224229429

可变参数应用
//可变参数至少要有一个具体的参数
//因为要找起始地址
int sum(int n,...)
//参数要依次右→左压栈,形成栈帧结构
{va_list s;//char*va_start(s,n);//s指向n的地址 &n//va* 都是宏int sum=0;while(n--){sum+=va_arg(s,int);}va_end(s);//s=NULL;return sum;
}

image-20250413225039175

image-20250413225117687

printf("%d %s %c",123,"hello",'c');

image-20250413225508529

所以 printf 内部要做字符串分析,控制格式


获取时间的方式

time

image-20250413225832522

gettimeofday

image-20250413230009725

localtime

image-20250413230316744

image-20250413230347274


因为可变参数要做字符串处理

所以直接用现成的这两个

image-20250413231301397

log.hpp

#pragma once#include <iostream>
#include <stdarg.h>
#include <time.h>
#include<unistd.h>
#include<cstdlib>
#include<cerrno>
#include<cstring>
#include<string>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>using namespace std;#define SIZE 1024#define Info    0
#define Debug   1
#define Warming 2
#define Error   3
#define Fatal   4#define Screen      1
#define Onefile     2
#define Classfile   3#define Logfile "log.txt"class Log
{
public:Log(){PrintMethod=Screen;path="./log/";}void Enable(int method){PrintMethod=method;}string leveltostring(int level){switch (level){case Info:return "Info";case Debug:return "Debug";case Warming:return "Warming";case Error:return "Error";case Fatal:return "Fatal";default:return "None";}}// void logmsg(int level, char *format, ...)// {//     time_t t = time(nullptr);//     struct tm *ctime = localtime(&t);//     char lbuffer[SIZE];//     snprintf(lbuffer, sizeof(lbuffer), "[%s][%d-%d-%d %d:%d:%d]", leveltostring(level).c_str(),//              ctime->tm_year + 1900, ctime->tm_mon + 1, ctime->tm_mday,//              ctime->tm_hour, ctime->tm_min, ctime->tm_sec);//     va_list s;//     va_start(s, format);//     char rbuffer[SIZE];//     vsnprintf(rbuffer, sizeof(rbuffer), format, s);//     va_end(s);//     // 格式:默认部分(具体参数部分)+自定义部分(可变参数部分)//     char logtxt[SIZE * 2];//     snprintf(logtxt, sizeof(logtxt), "%s %s", lbuffer, rbuffer);//     printLog(level,logtxt);// }void printLog(int level,string logtxt){switch (PrintMethod){case Screen:cout<<logtxt<<endl;break;case Onefile:printOnefile(Logfile,logtxt);break;case Classfile:printClassfile(level,logtxt);break;default:break;}}void printOnefile(const string&logname,const string &logtxt){string _logname=path+logname;int fd=open(_logname.c_str(),O_WRONLY|O_CREAT|O_APPEND,0666);//log.txtif(fd<0)return;write(fd,logtxt.c_str(),logtxt.size());close(fd);}void printClassfile(int level,const string &logtxt){string filename=Logfile;filename+=".";filename+=leveltostring(level);//log.txt.Info/Warming...printOnefile(filename,logtxt);}void operator()(int level, char *format, ...){time_t t = time(nullptr);struct tm *ctime = localtime(&t);char lbuffer[SIZE];snprintf(lbuffer, sizeof(lbuffer), "[%s][%d-%d-%d %d:%d:%d]", leveltostring(level).c_str(),ctime->tm_year + 1900, ctime->tm_mon + 1, ctime->tm_mday,ctime->tm_hour, ctime->tm_min, ctime->tm_sec);va_list s;va_start(s, format);char rbuffer[SIZE];vsnprintf(rbuffer, sizeof(rbuffer), format, s);va_end(s);// 格式:默认部分(具体参数部分)+自定义部分(可变参数部分)char logtxt[SIZE * 2];snprintf(logtxt, sizeof(logtxt), "%s %s", lbuffer, rbuffer);printLog(level,logtxt);}~Log(){}
private:int PrintMethod;string path;
};// //可变参数至少要有一个具体的参数
// //因为要找起始地址
// int sum(int n,...)
// //参数要依次右→左压栈,形成栈帧结构
// {
//     va_list s;//char*
//     va_start(s,n);//s指向n的地址 &n
//     //va* 都是宏
//     int sum=0;
//     while(n--)
//     {
//         sum+=va_arg(s,int);
//     }
//     va_end(s);//s=NULL;
//     return sum;
// }

日志的应用

server.cc

#include <iostream>
#include"comm.hpp"
#include"log.hpp"
using namespace std;int main()
{Init init;Log log;// log.Enable(Screen);// log.Enable(Onefile);log.Enable(Classfile);//打开管道int fd=open(FIFO_FILE,O_RDONLY);//等待写入方打开之后,自己才会打开文件,向后执行。//因为要有人写才能读。反之,写端也一样。//open阻塞了!if(fd<0){log(Fatal,"error string: %s , error code: %d\n",strerror(errno),errno);exit(FIFO_OPEN_ERR);}//为了测试多写点日志等级的代码log(Info,"server open file done , error string: %s , error code: %d\n",strerror(errno),errno);log(Debug,"server open file done , error string: %s , error code: %d\n",strerror(errno),errno);log(Warming,"server open file done , error string: %s , error code: %d\n",strerror(errno),errno);log(Error,"server open file done , error string: %s , error code: %d\n",strerror(errno),errno);log(Fatal,"server open file done , error string: %s , error code: %d\n",strerror(errno),errno);//开始通信while(1){char buffer[1024]={0};int x=read(fd,buffer,sizeof(buffer));if(x>0){buffer[x]=0;cout<<"client say: "<<buffer<<endl;}else if(x==0){log(Debug,"client quit , me too , error string: %s , error code: %d\n",strerror(errno),errno);break;}else break;}close(fd);return 0;
}

Screen

image-20250414115632170

Onefile

image-20250414115452834

Classfile

image-20250414120319581

http://www.dtcms.com/wzjs/38245.html

相关文章:

  • 国家级门户网站有哪些网站制作建设
  • 深圳推荐企业网站制作维护宁波网络推广运营公司电话
  • 大连网站设计策划竞价托管哪家专业
  • 合肥建网站要多少钱网店推广网站
  • php第一季网站开发实例教程今日nba数据帝
  • wordpress邮箱设置重庆 seo
  • 网站页尾版权磁力狗
  • 全球做的比较好的网站常用的营销方法和手段
  • 企业网站设计需求文档个人网站制作模板
  • 温州网站设计案例郑州seo线下培训
  • 网站书店架构书怎么做百度seo刷排名工具
  • 什么网站做兼职最好快速seo关键词优化技巧
  • 做传销一般是不是有网站晋城seo
  • 如何在微信内做网站微信营销的优势
  • 十堰seo优化报价谷歌seo和百度seo区别
  • 瓜子网网站建设策划书百度搜索引擎优化相关性评价
  • 惠州网站建设(推荐乐云践新)百度广告投放价格
  • 做网站什么最赚钱吗怎么开发一个网站
  • 网站上设置返回首页的超链接咋做的营销案例100例小故事及感悟
  • 站长之家点击进入百度一下打开
  • 黄页引流推广链接昆明seo关键词排名
  • 网站空间升级通知百度搜索量统计
  • 做个网站跳转链接怎么做aso排名优化知识
  • 前端只是做网站吗无屏蔽搜索引擎
  • 政府网站建设考试题目上海最新发布
  • 重庆工厂网站建设搜索引擎优化岗位
  • 怎么做网站教程+用的工具怎么免费搭建自己的网站
  • 自建站和独立站黑帽seo培训大神
  • 郑州市住房和城乡建设委员会网站seo接单平台有哪些
  • 重庆网站建设只选承越搜索引擎费用