g_pLog
g_pLog = new CLog("log");
g_pLog->Enable();
g_pScrLog = new CLog("data");
g_pScrLog->Enable();
CString srelog= _T("log...");
g_pLog->WriteLogFile(srelog);
#include <sys/stat.h>
#include <fcntl.h>
#include <io.h>
#include <afxmt.h>
#define MAX_ROW 5000
/**********************************************************************************
程序在当前目录下生成日志文件夹(如果该文件夹存在,则不生成),
每天的日志放在一个以当天日期命名的文件夹中。
MAX_ROW 定义一个日志文件的最大行数,一个日志文件达到这个行数后即关闭,并创建一个新文件。
**********************************************************************************/
class CLog
{
public:
CLog(char* directory);
~CLog();
public:
void Disable(); // 关闭日志功能
void Enable(); // 打开日志功能
void WriteLogFile(const char* fmt, ... );// 写日志函数
void DeleteLogFile();
protected:
int NewLogFile(); // 创建新日志文件
BOOL IsChangeDay(); // 判断是否跨天(凌晨0点)
CString GetCurntTime(); // 获得当前时间字符串,格式为 200709061150
BOOL DelTree(LPCTSTR lpszPath);
private:
int m_filehandle;
int m_row;
int m_dirnum;
int m_filenum;
BOOL m_needlog;
char m_sContent[*];
CString m_strContent;
CString m_sCurtTime;
CString m_sYestady;
CString m_sToday;
CString m_sCurtDir;
CString m_sLogDir;
CString m_sLogDayDir;
CCriticalSection m_cs;
};
extern CLog *g_pLog;
extern CLog *g_pScrLog;
#include "stdafx.h"
#include "Log.h" #include <direct.h> CLog *g_pLog; // 日志类指针
CLog *g_pScrLog; // 设备原始数据记录指针 /* ==============
创建日志文件 参数:
directory 目录名称
返回值:
无
*///=============
CLog::CLog(char* directory)
{
m_row = ;
m_filehandle = ;
m_dirnum = ;
m_filenum = ;
m_sCurtTime = _T("");
m_sToday = _T("");
m_sYestady = _T("");
m_sCurtDir = _T("");
m_sLogDir = _T("");
m_needlog = FALSE; GetCurrentDirectory(_MAX_PATH,m_sCurtDir.GetBuffer(_MAX_PATH));
m_sCurtDir.ReleaseBuffer(); CString sDirName;
CFileFind f;
BOOL bHasLogDir = FALSE;
BOOL bFind = f.FindFile(m_sCurtDir + "\\*.*"); // 文件是否存在 while (bFind)
{
bFind = f.FindNextFile(); if (f.IsDots())
continue; if (f.IsDirectory())
{
sDirName = f.GetFileName();
sDirName.MakeLower();
if (sDirName == (CString)directory)
{
bHasLogDir = TRUE;
break;
}
}
} m_sLogDir = m_sCurtDir + (CString)"\\" + (CString)directory; if (!bHasLogDir)
{
_mkdir(m_sLogDir);
} CString strTime = GetCurntTime (); m_sToday = strTime.Mid(,);
} CLog::~CLog()
{
if(m_filehandle != )
_close(m_filehandle);
} /* ==============
创建日志文件 参数:
无
返回值:
0 成功.-1 失败
*///=============
int CLog::NewLogFile()
{
CString strLogfileName; if (m_filenum > )
{
_close(m_filehandle);
} strLogfileName = m_sLogDayDir + (CString)"\\" + m_sCurtTime + (CString)".Log"; if ((m_filehandle=_open(strLogfileName, _O_WRONLY)) == -)
{
if ((m_filehandle=_open(strLogfileName, _O_WRONLY|_O_CREAT|O_TRUNC, _S_IREAD|_S_IWRITE)) == -)
{
printf("cannot create log file:%s\n",strLogfileName);
return -;
}
} m_filenum++;
return ;
} /* ==============
判断是否跨天(凌晨0点) 参数:
无
返回值:
false 当天
true 跨天
*///=============
BOOL CLog::IsChangeDay()
{
m_sCurtTime = GetCurntTime();
m_sToday = m_sCurtTime.Mid(,); if (m_sToday != m_sYestady)
{
m_sYestady = m_sToday;
m_sLogDayDir = m_sLogDir + (CString)"\\" + m_sToday;
_mkdir(m_sLogDayDir);
return TRUE;
} return FALSE;
} /* ==============
写日志函数 参数:
要记录的内容
返回值:
无
*///=============
void CLog::WriteLogFile(const char* fmt, ... )
{
if (!m_needlog)
return; m_cs.Lock(); if (m_row >= MAX_ROW || IsChangeDay())
{
if (NewLogFile() == -)
{
m_cs.Unlock();
return;
}
m_row = ;
} va_list v_args;
va_start(v_args,fmt);
vsprintf( m_sContent, fmt, v_args );
va_end( v_args ); CString strTime;
CTime cTime = CTime::GetCurrentTime();
strTime = _T("") + cTime.Format("%y-%m-%d %H:%M:%S"); m_strContent = (CString)"[" + strTime + (CString)"]" + (CString)m_sContent + "\n"; _write(m_filehandle, m_strContent, m_strContent.GetLength());
m_row++; m_cs.Unlock();
} /* ==============
获得当前时间字符串,格式为 20070906 参数:
无
返回值:
当前时间字符串
*///============= CString CLog::GetCurntTime()
{
CString strTime; CTime cTime = CTime::GetCurrentTime();
strTime = _T("") + cTime.Format("%y%m%d%H%M%S"); return strTime;
} /* ==============
打开日志功能 参数:
无
返回值:
无
*///=============
void CLog::Enable()
{
m_needlog = TRUE;
} /* ==============
关闭日志功能 参数:
无
返回值:
无
*///=============
void CLog::Disable()
{
m_needlog = FALSE;
} /* ==============
删除7天前的日志 参数:
无
返回值:
无
*///=============
void CLog::DeleteLogFile()
{
CString iFlieName,iFlieName1,iToday,TStr;
int k,k1,k2;
char s[] = {'\0'};
TStr = GetCurntTime();
iToday = TStr.Mid(,);
CFileFind ff;
BOOL bFound = ff.FindFile(m_sLogDir+"\\*", );
while(bFound)
{
bFound = ff.FindNextFile(); if (ff.IsDots())
continue; if (ff.IsDirectory())
{
// 这里是目录
iFlieName = ff.GetFilePath();
iFlieName1 = iFlieName.Right(); k = atoi(iToday)/ - atoi(iFlieName1)/;
k1 = atoi(iToday) - atoi(iFlieName1);
k2 = - (atoi(iFlieName1)%) + (atoi(iToday)%);
_tcscpy( s , iFlieName.GetBuffer(iFlieName.GetLength()) ) ;
if ((k>)&&(k<))
{
DelTree((LPCTSTR)s);
}
else if (k == )
{
if (k1 > )
{
DelTree((LPCTSTR)s);
}
}
else if (k == )
{
if (k2 > )
{
DelTree((LPCTSTR)s);
}
}
else
{
if ((atoi(iToday)/-atoi(iFlieName1)/)==)
{
if ((atoi(iFlieName1)%)/ == )
{
if (k2 > )
{
DelTree((LPCTSTR)s);
}
}
else
{
DelTree((LPCTSTR)s);
}
}
else
{
DelTree((LPCTSTR)s);
}
}
}
}
ff.Close();
} /* ==============
删除文件夹 参数:
文件夹的路径
返回值:
删除是否成功
*///=============
BOOL CLog::DelTree(LPCTSTR lpszPath)
{
SHFILEOPSTRUCT FileOp;
FileOp.fFlags = FOF_NOCONFIRMATION;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = lpszPath;//路径名从何处来
FileOp.pTo = NULL;//
FileOp.wFunc = FO_DELETE;
return SHFileOperation(&FileOp) == ;
}
g_pLog的更多相关文章
随机推荐
- 跟我学SpringCloud | 第十八篇:微服务 Docker 化之基础环境
1. 容器化 Docker 的横空出世,给了容器技术带来了质的飞跃,Docker 标准化了服务的基础设施,统一了应用的打包分发,部署以及操作系统相关类库等,解决了测试生产部署时环境差异的问题.对于运维 ...
- 初学者-asp.net三层架构
一.概述: 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI).业务逻辑层(BLL).数据访问层(DAL).区分层次的目的即为了“高内聚,低耦合”的思想.是一种总体设计的思想. 1.表现层( ...
- uboot学习之uboot-spl的程序流程分析
uboot-spl的程序流程主要包含下面的几个函数: _start->reset->save_boot_params->cpu_init_crit->lowlevel_init ...
- Ubuntu python-matplotlib安装couldn't connect to display ":0.0"
先卸载旧的matplotlib库(sudo pip3 uninstall matplotlib),再利用命令 sudo apt-get install python-matplotlib安装,自动安装 ...
- CocosCreator实现动物同化
获取源码 关注微信公众号『一枚小工 』,发送『动物同化 』获取完整游戏源码. 游戏玩法 游戏目标是将游戏区域的动物全部同化成同一种动物.游戏从左上角开始,从右边点击需要变成的目标动物头像,如果被同化动 ...
- centos 升级
yum -y update升级所有包同时也升级软件和系统内核 yum -y upgrade只升级所有包,不升级软件和系统内核
- invalid comparison: java.util.ArrayList and java.lang.String解决
报错: Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause ...
- linux 指定tomcat的具体路径
1.直接修改catalina.sh中对应的变量 CATALINA_HOME=/xx/xxCATALINA_BASE=/xx/xx (该方法需要找到所有的变量进行修改,不适合,推荐使用方式2) 2.在p ...
- 基于hap的文件上传和下载
序言 现在,绝大部分的应用程序在很多的情况下都需要使用到文件上传与下载的功能,在本文中结合hap利用spirng mvc实现文件的上传和下载,包括上传下载图片.上传下载文档.前端所使用的技术不限,本文 ...
- vue运行报错webpack-dev-server: command not found
翻译过来就是: 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 解决方法: 然后总结下成功的步骤: 1. 直接在项目目录下: cnpm install npm run ...