C++日志记录类以及日志记录程序

C++日志记录类以及日志记录程序,第1张

使用C++语言编写写日志类,支持写日志级别设置、支持多线程、支持可变形参表写日志。

主要提供以下接口:

1、设置写日志的级别 2、写关键日志信息 3、写错误日志信息 4、写警告日志信息 5、写一般日志信息

#ifndef COMMAND_DEFINE_H#define COMMAND_DEFINE_H//日志级别的提示信息static const char * KEYINFOPREFIX = " Key: n"static const char * ERRORPREFIX = " Error: n"static const char * WARNINGPREFIX = " Warning: n"static const char * INFOPREFIX = " Info: n"static const int MAX_STR_LEN = 1024//日志级别枚举typedef enum EnumLogLevel{ LogLevelAll = 0, //所有信息都写日志 LogLevelMid, //写错误、警告信息 LogLevelNormal, //只写错误信息 LogLevelStop //不写日志}#endif

#ifndef LOGGER_H_#define LOGGER_H_#include#include#include "CommandDefine.h"/* * 类名:Logger * 作用:提供写日志功能,支持多线程,支持可变形参数 *** 作,支持写日志级别的设置 * 接口:SetLogLevel:设置写日志级别 TraceKeyInfo:忽略日志级别,写关键信息 TraceError:写错误信息 TraceWarning:写警告信息 TraceInfo:写一般信息*/class Logger{public: //默认构造函数 Logger()//构造函数 Logger(const char * strLogPath, EnumLogLevel nLogLevel = EnumLogLevel::LogLevelNormal)//析构函数 virtual ~Logger()public: //写关键信息 void TraceKeyInfo(const char * strInfo, ...)//写错误信息 void TraceError(const char* strInfo, ...)//写警告信息 void TraceWarning(const char * strInfo, ...)//写一般信息 void TraceInfo(const char * strInfo, ...)//设置写日志级别 void SetLogLevel(EnumLogLevel nLevel)private: //写文件 *** 作 void Trace(const char * strInfo)//获取当前系统时间 char * GetCurrentTime()//创建日志文件名称 void GenerateLogName()//创建日志路径 void CreateLogPath()private: //写日志文件流 FILE * m_pFileStream//写日志级别 EnumLogLevel m_nLogLevel//日志的路径 char m_strLogPath[MAX_STR_LEN]//日志的名称 char m_strCurLogName[MAX_STR_LEN]//线程同步的临界区变量 CRITICAL_SECTION m_cs}#endif

#include "Logger.h"#include#include#include#include#pragma comment(lib, "DbgHelp.lib") //默认构造函数Logger::Logger(){ //初始化 memset(m_strLogPath, 0, MAX_STR_LEN)memset(m_strCurLogName, 0, MAX_STR_LEN)m_pFileStream = NULL//设置默认的写日志级别 m_nLogLevel = EnumLogLevel::LogLevelNormal//初始化临界区变量 InitializeCriticalSection(&m_cs)//创建日志文件名 GenerateLogName()} //构造函数Logger::Logger(const char * strLogPath, EnumLogLevel nLogLevel):m_nLogLevel(nLogLevel){ //初始化 m_pFileStream = NULLstrcpy(m_strLogPath, strLogPath)InitializeCriticalSection(&m_cs)CreateLogPath()GenerateLogName()} //析构函数Logger::~Logger(){ //释放临界区 DeleteCriticalSection(&m_cs)//关闭文件流 if(m_pFileStream) fclose(m_pFileStream)} //写关键信息接口void Logger::TraceKeyInfo(const char * strInfo, ...){ if(!strInfo) returnchar pTemp[MAX_STR_LEN] = {0}strcpy(pTemp, GetCurrentTime())strcat(pTemp, KEYINFOPREFIX)//获取可变形参 va_list arg_ptr = NULLva_start(arg_ptr, strInfo)vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr)va_end(arg_ptr)//写日志文件 Trace(pTemp)arg_ptr = NULL} //写错误信息void Logger::TraceError(const char* strInfo, ...){ //判断当前的写日志级别,若设置为不写日志则函数返回 if(m_nLogLevel >= EnumLogLevel::LogLevelStop) returnif(!strInfo) returnchar pTemp[MAX_STR_LEN] = {0}strcpy(pTemp, GetCurrentTime())strcat(pTemp, ERRORPREFIX)va_list arg_ptr = NULLva_start(arg_ptr, strInfo)vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr)va_end(arg_ptr)Trace(pTemp)arg_ptr = NULL} //写警告信息void Logger::TraceWarning(const char * strInfo, ...){ //判断当前的'写日志级别,若设置为只写错误信息则函数返回 if(m_nLogLevel >= EnumLogLevel::LogLevelNormal) returnif(!strInfo) returnchar pTemp[MAX_STR_LEN] = {0}strcpy(pTemp, GetCurrentTime())strcat(pTemp, WARNINGPREFIX)va_list arg_ptr = NULLva_start(arg_ptr, strInfo)vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr)va_end(arg_ptr)Trace(pTemp)arg_ptr = NULL} //写一般信息void Logger::TraceInfo(const char * strInfo, ...){ //判断当前的写日志级别,若设置只写错误和警告信息则函数返回 if(m_nLogLevel >= EnumLogLevel::LogLevelMid) returnif(!strInfo) returnchar pTemp[MAX_STR_LEN] = {0}strcpy(pTemp, GetCurrentTime())strcat(pTemp,INFOPREFIX)va_list arg_ptr = NULLva_start(arg_ptr, strInfo)vsprintf(pTemp + strlen(pTemp), strInfo, arg_ptr)va_end(arg_ptr)Trace(pTemp)arg_ptr = NULL} //获取系统当前时间char * Logger::GetCurrentTime(){ time_t curTimestruct tm * pTimeInfo = NULLtime(&curTime)pTimeInfo = localtime(&curTime)char temp[MAX_STR_LEN] = {0}sprintf(temp, "%02d:%02d:%02d", pTimeInfo->tm_hour, pTimeInfo->tm_min, pTimeInfo->tm_sec)char * pTemp = tempreturn pTemp} //设置写日志级别void Logger::SetLogLevel(EnumLogLevel nLevel){ m_nLogLevel = nLevel} //写文件 *** 作void Logger::Trace(const char * strInfo){ if(!strInfo) returntry { //进入临界区 EnterCriticalSection(&m_cs)//若文件流没有打开,则重新打开 if(!m_pFileStream) { char temp[1024] = {0}strcat(temp, m_strLogPath)strcat(temp, m_strCurLogName)m_pFileStream = fopen(temp, "a+")if(!m_pFileStream) { return} } //写日志信息到文件流 fprintf(m_pFileStream, "%sn", strInfo)fflush(m_pFileStream)//离开临界区 LeaveCriticalSection(&m_cs)} //若发生异常,则先离开临界区,防止死锁 catch(...) { LeaveCriticalSection(&m_cs)}} //创建日志文件的名称void Logger::GenerateLogName(){ time_t curTimestruct tm * pTimeInfo = NULLtime(&curTime)pTimeInfo = localtime(&curTime)char temp[1024] = {0}//日志的名称如:2013-01-01.log sprintf(temp, "%04d-%02d-%02d.log", pTimeInfo->tm_year+1900, pTimeInfo->tm_mon + 1, pTimeInfo->tm_mday)if(0 != strcmp(m_strCurLogName, temp)) { strcpy(m_strCurLogName,temp)if(m_pFileStream) fclose(m_pFileStream)char temp[1024] = {0}strcat(temp, m_strLogPath)strcat(temp, m_strCurLogName)//以追加的方式打开文件流 m_pFileStream = fopen(temp, "a+")} } //创建日志文件的路径void Logger::CreateLogPath(){ if(0 != strlen(m_strLogPath)) { strcat(m_strLogPath, "")} MakeSureDirectoryPathExists(m_strLogPath)}

以上就是本文的全部内容,希望对大家的学习C++有所帮助。

在 *** 作windows系统时,系统在后台会记录相关的日志。有时候系统出现错误时可以查看日志定位问题,这里分享下查看WINDOWS日志。

1、首先在桌面的“计算机”图标右键,选择“管理”,如下图所示。

2、然后在计算机管理页展开事件查看器,如下图所示。

3、接着展开windows日志,在这里windows把日志分为五大类,如下图所示。

4、比如双击打开应用程序的日志,会看到很多日志,包括信息、警告和错误类型的日志。

5、最后双击具体的一条日志就可以查看详情。

手机日志是什么

手机日志通过一系列的分析图表,帮你找出你的手机使用习惯,找到你最近最经常联系的人、从而更加紧密地联系,发现你是更爱发短信还是更爱通话、从而选择一个更适合自己的通话套餐。

当然,除此之外还能帮你将所有的短信和通话记录都备份到文件中。

请问手机里的 log 是什么意思 谢谢

日志文件,记录了手机开机以及一些系统程序的运行时间等等。没什么用,不过要小心删除,有些日志关联了系统的稳定

手机文件管理中的log是什么意思?

是一些系统或者程序运行中产生的日志记录,有的程序会自动上传这些log到服务器,便于开发人员跟踪错误信息

手机中垃圾文件中的日志文件指的是什么?可以清理吗?占3G内存啊

要恢复C盘空间,您应该:1.

关闭系统还原,系统还原我的电脑属性关闭系统中的所有磁盘恢复

2.关闭系统休眠,桌面屏保属性功耗睡在启动系统休眠的勾去掉

3.关闭虚拟内存之前,我的电脑属性高级属性高级设置来改变选举系统盘C盘,选择无分页面,然后虚拟内存设置到其磁盘的可用磁盘空间多的磁盘,比如D,E,F等盘。

4.硬盘优化大师清理注册表垃圾和垃圾清理

5. IE临时文件夹,IE属性被删除COOKIES,删除文件页6开始搜索* .LOG * .tmp和删除所有搜索

7.删除日志和系统日志,我的电脑控制面板管理工具计算机管理事件查看器应用程序,右键清除事件,其次是清除系统日志

8.清理系统缓存:2000系统是:C:\ WINNT \ SYSTEM32 \ dllcache文件下

XP系统中的所有文件是:C:\ WINDOWS \ SYSTEM32 \ dllcache文件的所有文件系统缓存清理下。打开我的电脑,工具。文件和文件夹选项,然后隐藏受保护的系统文件

上了钩在演出的勾去掉所有文件。然后搜索dllcache文件搜索后打开,删除所有文件

dllcache文件注意:您可以直接运行SFC.EXE / PURGECACHE命令自动删除。 9.

清空回收站

10蠕虫,垃圾邮件继续复制文件,填补了系统的磁盘空间,导致系统瘫痪,建议杀毒

11.删除C:\ WINDOWS \ SoftwareDistribution \下

12.下载删除文件C:\ WINDOWS \下RegisteredPackages目录中的所有

13.删除C:\ WINDOWS \ Downloaded Program Files文件14

下的我的电脑文件夹选项中的所有文件查看隐藏受系统保护的文件众所周知的钩去掉,钩决心显示所有文件。

删除C:\ WINDOWS \ $与所有文件。

释放C盘空间27招优化技术

enet/....shtml

丢失的原因和硬盘空间解决方法

bbsadmin/dispbbs.aspBoardID=70&id=65198

系统日志文件是什么

系统日志文件是系统 *** 作情况的记录。例如,开机时间、关机时间、故障耿况等。通常在C:\windows\system32 目录下面。可用手机360卫士清理!

手机文件里的bbklog文件是什么。可以删除吗?

可能您运行过手机的Log(系统运行日志)抓取工具bbk-log文件是用来在抓取log的时候存储log数据的如果您不需要解决程序运行故障的话可以删除此文件

手机里后缀名为.log的文件可以删吗?

可以,手机里的假如是系统文件重启手机会自动生成的。

1.app.log是什么?有什么用可以删掉吗?

1.app.log是日志文件,一般是系统或者某些软件对已完成的某种处理的记录,以便将来做为参考。如果不需要可以删除。

log意即日志,.log即为文件格式后缀,通常是系统或者某些软件对已完成的某种处理的记录,以便将来做为参考,它并没有固定的格式,通常是文本文件,可以用记事本打开以查看内容,当然很可能是其它格式,直接打开就是乱码。大部分的log可以从文件名看出它的作用,比如uninstall.log或是error.log,当然前者通常是软件安装过程中生成的记录,以便将来卸载的时候可以提供给卸载程序使用,后者通常是用来记录一些软件运行中的错误信息等等。

手机中数据日志是什么?能清理吗!有图

可以清理,日志是帮助手机版本更好升级而设的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12164577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存