日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

撰写日志类

發(fā)布時間:2024/4/13 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 撰写日志类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?/*?
Log?File?Library(WIN98/NT/2000)?

Compile?by:?BC++?5;?C++?BUILDER;?VC++;?VC.NET;?

copyright(c)?2004.5?-?2005.3??llbird?wushaojian@21cn.com?
?http://blog.csdn.net/wujian53?
?
?
*/?

?
/*?
Use:
//這個代碼我用工業(yè)現(xiàn)場24X7值守的程序紀錄各種信息,?簡單易用;
//一般用一個全局日志對象,?有臨界排斥可以多線程安全使用。
//有兩個類
class?LogFile;//用戶定義日志文件名
class?LogFileEx;//有日志文件名自動生成功能?,?可分年月日頻率生成文件名,?可指定日志存放的目錄

LogFile?gLog("My.Log");
gLog.Log("test",?4);//記錄日志
gLog.Log("系統(tǒng)啟動");

LogFileEx?gLog(".",?LogFileEx?::?YEAR);//一年生成一個日志文件
LogFileEx?gLog(".\\Log",?LogFileEx?::?MONTH);//一月生成一個日志文件
LogFileEx?gLog(".\\Log",?LogFileEx?::?DAY);//一天生成一個日志文件
//注意日志所屬目錄創(chuàng)建失敗會自動退出,?請注意目錄的合法性,?文件生成頻率看情況掌握
//24小時運行的程序可以每天生成一個日志文件,?以免內(nèi)容過多
?*/?

?
#ifndef?_LOGFILE_H
?#define??_LOGFILE_H?
?
#include?
?<?assert.h?>?
#include?
?<?time.h?>?
#include?
?<?stdio.h?>?
#include?
?<?windows.h?>?
?
?
class??LogFile
?{
?protected?:

?CRITICAL_SECTION?_csLock;
??char???*??_szFileName;
?HANDLE?_hFile;

??bool??OpenFile()?//?打開文件,?指針到文件尾?
?
??{
???if?(IsOpen())
????return???true?;

???if?(?!?_szFileName)
????return???false?;

??_hFile??=???CreateFile(
???_szFileName,?
???GENERIC_WRITE,
???FILE_SHARE_READ??|??FILE_SHARE_WRITE,
???NULL,
???OPEN_EXISTING,
???FILE_ATTRIBUTE_NORMAL,
???NULL?
??);

???if?(?!?IsOpen()??&&??GetLastError()??==???2?)?//?打開不成功,?且因為文件不存在,?創(chuàng)建文件?
?
???_hFile??=???CreateFile(
????_szFileName,?
????GENERIC_WRITE,
????FILE_SHARE_READ??|??FILE_SHARE_WRITE,
????NULL,
????OPEN_ALWAYS,
????FILE_ATTRIBUTE_NORMAL,
????NULL?
???);??

???if?(IsOpen())
???SetFilePointer(_hFile,??0?,?NULL,?FILE_END);

???return??IsOpen();
?}?
?
?DWORD?Write(LPCVOID?lpBuffer,?DWORD?dwLength)
??{
??DWORD?dwWriteLength??=???0?;

???if?(IsOpen())
???WriteFile(_hFile,?lpBuffer,?dwLength,??&?dwWriteLength,?NULL);

???return??dwWriteLength;
?}?
?
??virtual???void??WriteLog(?LPCVOID?lpBuffer,?DWORD?dwLength)?//?寫日志,?可以擴展修改?
?
??{
??time_t?now;
???char??temp[?21?];
??DWORD?dwWriteLength;

???if?(IsOpen())
???{
???time(?&?now);
???strftime(temp,??20?,??"?%Y-%m-%d?%H:%M:%S?"?,?localtime(?&?now));

???WriteFile(_hFile,??"?\xd\xa#-----------------------------?"?,??32?,??&?dwWriteLength,?NULL);
???WriteFile(_hFile,?temp,??19?,??&?dwWriteLength,?NULL);
???WriteFile(_hFile,??"?-----------------------------#\xd\xa?"?,??32?,??&?dwWriteLength,?NULL);
???WriteFile(_hFile,?lpBuffer,?dwLength,??&?dwWriteLength,?NULL);
???WriteFile(_hFile,??"?\xd\xa?"?,??2?,??&?dwWriteLength,?NULL);
???
???FlushFileBuffers(_hFile);

??}?
?}?
?
???void??Lock()???{?::EnterCriticalSection(?&?_csLock);?}?
???void??Unlock()??{?::LeaveCriticalSection(?&?_csLock);?}?
?
?public?:
??
?LogFile(?const???char???*?szFileName??=???"?Log.log?"?)?//?設定日志文件名?
?
??{
??_szFileName??=??NULL;
??_hFile??=??INVALID_HANDLE_VALUE;
??::InitializeCriticalSection(?&?_csLock);

??SetFileName(szFileName);
?}?
?
??virtual???~?LogFile()
??{
??::DeleteCriticalSection(?&?_csLock);
??Close();

???if?(_szFileName)
???delete?[]_szFileName;
?}?
?
??const???char???*??GetFileName()
??{
???return??_szFileName;
?}?
?
??void??SetFileName(?const???char???*?szName)?//?修改文件名,?同時關(guān)閉上一個日志文件?
?
??{
??assert(szName);

???if?(_szFileName)
???delete?[]_szFileName;

??Close();

??_szFileName??=???new???char?[strlen(szName)??+???1?];
??assert(_szFileName);
??strcpy(_szFileName,?szName);
?}?
?
??bool??IsOpen()
??{
???return??_hFile??!=??INVALID_HANDLE_VALUE;
?}?
?
??void??Close()
??{
???if?(IsOpen())
???{
???CloseHandle(_hFile);
???_hFile??=??INVALID_HANDLE_VALUE;
??}?
?}?
?
??void??Log(LPCVOID?lpBuffer,?DWORD?dwLength)?//?追加日志內(nèi)容?
?
??{
??assert(lpBuffer);
??__try
???{
???Lock();

????if?(?!?OpenFile())
?????return?;

???WriteLog(lpBuffer,?dwLength);
??}?
??__finally
???{
???Unlock();
??}??
?}?
?
??void??Log(?const???char???*?szText)
??{
??Log(szText,?strlen(szText));
?}?
?
?private?:?//?屏蔽函數(shù)?
?

?LogFile(?const??LogFile?&?);
?LogFile?&?operator???=??(?const??LogFile?&?);
}?
;

?class??LogFileEx?:??public??LogFile
?{
?protected?:

??char???*?_szPath;
??char??_szLastDate[?9?];
??int??_iType;

??void??SetPath(?const???char???*?szPath)
??{
??assert(szPath);

??WIN32_FIND_DATA?wfd;
???char??temp[MAX_PATH??+???1?]??=???{?0?}?;

???if?(FindFirstFile(szPath,??&?wfd)??==??INVALID_HANDLE_VALUE??&&??CreateDirectory(szPath,?NULL)??==???0?)
???{
???strcat(strcpy(temp,?szPath),??"??Create?Fail.?Exit?Now!?Error?ID?:?"?);
???ltoa(GetLastError(),?temp??+??strlen(temp),??10?);
???MessageBox(NULL,?temp,??"?Class?LogFileEx?"?,?MB_OK);
???exit(?1?);
??}?
???else?
????{
???GetFullPathName(szPath,?MAX_PATH,?temp,?NULL);
???_szPath??=???new???char?[strlen(temp)??+???1?];
???assert(_szPath);
???strcpy(_szPath,?temp);
??}?
?}?
?
?public?:

??enum??LOG_TYPE?{YEAR??=???0?,?MONTH??=???1?,?DAY??=???2?}?;

?LogFileEx(?const???char???*?szPath??=???"?.?"?,?LOG_TYPE?iType??=??MONTH)
??{
??_szPath??=??NULL;
??SetPath(szPath);
??_iType??=??iType;
??memset(_szLastDate,??0?,??9?);
?}?
?
??~?LogFileEx()
??{
???if?(_szPath)
???delete?[]_szPath;
?}?
?
??const???char???*??GetPath()
??{
???return??_szPath;
?}?
?
??void??Log(LPCVOID?lpBuffer,?DWORD?dwLength)
??{
??assert(lpBuffer);

???char??temp[?10?];
???static???const???char??format[?3?][?10?]??=???{?"?%Y?"?,??"?%Y-%m?"?,??"?%Y%m%d?"?}?;
??
??__try
???{
???Lock();
???
???time_t?now??=??time(NULL);

???strftime(temp,??9?,?format[_iType],?localtime(?&?now));

????if?(strcmp(_szLastDate,?temp)??!=???0?)?//?更換文件名?
?
????{
????strcat(strcpy(_szFileName,?_szPath),??"?\\?"?);
????strcat(strcat(_szFileName,?temp),??"?.log?"?);
????strcpy(_szLastDate,?temp);
????Close();
???}?
?
????if?(?!?OpenFile())
?????return?;
???
???WriteLog(lpBuffer,?dwLength);
??}?
??__finally
???{
???Unlock();
??}?
?}?
?
??void??Log(?const???char???*?szText)
??{
??Log(szText,?strlen(szText));
?}?
?
?private?:?//?屏蔽函數(shù)?
?

?LogFileEx(?const??LogFileEx?&?);
?LogFileEx?&?operator???=??(?const??LogFileEx?&?);

}?
;

?#endif? 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的撰写日志类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。