咋做网站代码背景图,wordpress固定链接设置404,拖拽式wordpress建站,网站建设 西安日志文件Log.hpp 日志文件的作用简单的日志文件编写 日志文件的作用
日志文件可以很好的帮我们显示出程序运行的信息,例如,进程pid,运行时间,运行状况等,通过日志记录程序的执行路径、变量值、函数调用等#xff0c;可以帮助我们快速定位和修复代码中的错误。
简单的日志文件… 日志文件Log.hpp 日志文件的作用简单的日志文件编写 日志文件的作用
日志文件可以很好的帮我们显示出程序运行的信息,例如,进程pid,运行时间,运行状况等,通过日志记录程序的执行路径、变量值、函数调用等可以帮助我们快速定位和修复代码中的错误。
简单的日志文件编写
下面是用C/C编写的一段日志文件: Log.hpp
#pragma once //日志文件#includeiostream
#includecstdio
#includestdarg.h
#includectime
#includefstream
#include sys/stat.h
#include sys/types.henum //日志等级设置
{ Debug 0, //调试等级Info, //常规Warning, Error,Fatal //服务器
};enum //设置打印风格
{Screen 0, //打印到显示器OneFile, //打印到一个文件里ClassFile //分文件打印
};const int defauleStyle Screen; //默认打印到屏幕上
const std::string defaultFilename log.;
const std::string logdir log;std::string LevelToString(int level)
{switch(level){case Debug:return Debug;case Info:return Info;case Warning:return Warning;case Error:return Error;case Fatal:return Fatal;default:return Unknow;}
}std::string localTime()
{time_t curtime time(0);struct tm *t localtime(curtime);char time_buffer[128];snprintf(time_buffer,sizeof(time_buffer),%d-%d-%d %d:%d:%d,\t-tm_year1900,t-tm_mon1,t-tm_mday,\t-tm_hour,t-tm_min,t-tm_sec);return time_buffer;
}class Log
{
public:Log():style(defauleStyle),filename(defaultFilename){mkdir(logdir.c_str(),0775); //创建log目录用以记录日志文件}//设置打印风格,默认打印到屏幕void Enable(int sty){style sty;}void WriteOnefile(const std::string logname, const std::string message){std::ofstream out(logname,std::ios::app); //创建文件,并以追加的方式打印内容if(!out.is_open()) return;out.write(message.c_str(),message.size()); //向目标文件中输出内容out.close();}void WriteClassfile(const std::string level,const std::string message){std::string logname logdir; //写入文件名的时候加上路径,就会直接在所写路径下进行输出logname /;logname filename;logname level;WriteOnefile(logname,message);} void Writelog(const std::string level,const std::string message){switch (style){case Screen: //默认打印到屏幕std::coutmessagestd::endl;break;case OneFile: //默认打印到log.all文件中WriteClassfile(all,message);break;case ClassFile: //默认打印到各类日志文件中WriteClassfile(level,message);break;default:break;}}//使用可变参数void LogMessage(int level,const char* format,...){char leftbuffer[1024]; // 这里打印日志等级,时间 到leftguffersnprintf(leftbuffer, sizeof(leftbuffer), [%s] [%s], LevelToString(level).c_str(), localTime().c_str());char rightbuffer[1024]; // 这里打印输入参数的内容 到rightbufferva_list args;va_start(args,format); //初始化可变参数列表 //此时args指向了可变参数部分 , 将参数中的信息输入到字符串mess中vsnprintf(rightbuffer,sizeof(rightbuffer),format,args);va_end(args);//将信息合体std::string message(leftbuffer);message rightbuffer;//打印内容Writelog(LevelToString(level),message);}~Log(){}
public:int style;//打印风格 上面默认设置为打印到屏幕std::string filename; //文件名默认为: log.};调试代码: test.cc
#includeiostream
#includeLog.hpp
#include unistd.husing namespace std;void testLog()
{Log log;log.Enable(ClassFile);log.LogMessage(Debug, i am %d \n,getpid());log.LogMessage(Info, i am %d \n,getpid());log.LogMessage(Warning, i am %d \n,getpid());log.LogMessage(Error, i am %d \n,getpid());log.LogMessage(Fatal, i am %d \n,getpid());log.LogMessage(Debug, i am %d \n,getpid());log.LogMessage(Info, i am %d \n,getpid());log.LogMessage(Warning, i am %d \n,getpid());log.LogMessage(Error, i am %d \n,getpid());log.LogMessage(Fatal, i am %d \n,getpid());log.LogMessage(Debug, i am %d \n,getpid());log.LogMessage(Info, i am %d \n,getpid());log.LogMessage(Warning, i am %d \n,getpid());log.LogMessage(Error, i am %d \n,getpid());log.LogMessage(Fatal, i am %d \n,getpid());
}int main()
{testLog();return 0;
}
测试结果: 可以看到,log目录下有各个日志文件,每个日志文件中有不同的内容 如:log.Debug