最簡單的基於VC的日誌檔案類庫實現
阿新 • • 發佈:2019-01-23
-
if(strPath.Find(_T(":"))<=0)
{
strPath.Format(_T("%s\\%s"), GetExePath(FALSE), strCurFileName);
}
}
return strPath;
}
#define LOG_EVENT _T("ChyLogWrite")
CString LOG::s_strLogFile = _T("");
CString LOG::s_strLogPrefix = _T("");
HANDLE LOG::s_hWriteEvent = NULL;
LOG::LOG()
{
}
LOG::~LOG()
{
}
short LOG::SetLogFile (LPCTSTR strPath)
{
if(strPath==NULL || strPath[0]==0)
s_strLogFile = GetFileForExePath("log.log");
else
s_strLogFile = GetFileForExePath(strPath);
return 1;
}
CString LOG::GetLogFile()
{
return s_strLogFile;
}
short LOG::ViewLogFile()
{
CString strLogFile = GetLogFile();
ShellExecute(NULL, _T("open"), strLogFile, NULL, NULL, SW_SHOW);
return strLogFile.IsEmpty()?0:1;
}
short LOG::SetPrefix (LPCTSTR strPrefix)
{
if(strPrefix && strPrefix[0])
{
s_strLogPrefix = strPrefix;
}
return 1;
}
CString LOG::sOutV(LPCTSTR strType, LPCTSTR strFormat, va_list valist)
{
CString strPart_Prefix;
if(!s_strLogPrefix.IsEmpty())
{
strPart_Prefix.Format(_T("[%s]"), s_strLogPrefix);
}
CString strPart_Time;
{
SYSTEMTIME sysTime = {0};
GetLocalTime(&sysTime);
strPart_Time.Format(_T("[%2d-%2d %2d:%2d:%2d_%3d]"),
sysTime.wMonth, sysTime.wDay,
sysTime.wHour, sysTime.wMinute, sysTime.wSecond,
sysTime.wMilliseconds);
}
CString strPart_Type;
if(strType && strType[0])
{
strPart_Type.Format(_T("[%s]"), strType);
}
CString strPart_Info;
{
strPart_Info.FormatV(strFormat, valist);
}
CString str = strPart_Prefix + strPart_Time + strPart_Type+ strPart_Info;
return str;
}
CString LOG::sOut0 (LPCTSTR strType, LPCTSTR strFormat,...)
{
va_list valist;
va_start(valist, strFormat);
CString strInfo = sOutV(strType, strFormat, valist);
va_end(valist);
return strInfo;
}
CString LOG::sOut(LPCTSTR strFormat,...)
{
va_list valist;
va_start(valist, strFormat);
CString strInfo = sOutV(NULL, strFormat, valist);
va_end(valist);
return strInfo;
}
short LOG::OutV(LPCTSTR strType, LPCTSTR strFormat, va_list valist)
{
//--
if(s_hWriteEvent==NULL)
{
s_hWriteEvent = OpenEvent(0, FALSE,LOG_EVENT);
if(s_hWriteEvent==NULL)
s_hWriteEvent = CreateEvent(NULL, FALSE, TRUE, LOG_EVENT);
}
WaitForSingleObject(s_hWriteEvent, INFINITE);
//-開啟關閉檔案
if(strPath.Find(_T(":"))<=0)
{
strPath.Format(_T("%s\\%s"), GetExePath(FALSE), strCurFileName);
}
}
return strPath;
}
#define LOG_EVENT _T("ChyLogWrite")
CString LOG::s_strLogFile = _T("");
CString LOG::s_strLogPrefix = _T("");
HANDLE LOG::s_hWriteEvent = NULL;
LOG::LOG()
{
}
LOG::~LOG()
{
}
short LOG::SetLogFile
{
if(strPath==NULL || strPath[0]==0)
s_strLogFile = GetFileForExePath("log.log");
else
s_strLogFile = GetFileForExePath(strPath);
return 1;
}
CString LOG::GetLogFile()
{
return s_strLogFile;
}
short LOG::ViewLogFile()
{
CString strLogFile = GetLogFile();
ShellExecute(NULL, _T("open"), strLogFile, NULL, NULL, SW_SHOW);
return strLogFile.IsEmpty()?0:1;
}
short LOG::SetPrefix
{
if(strPrefix && strPrefix[0])
{
s_strLogPrefix = strPrefix;
}
return 1;
}
CString LOG::sOutV(LPCTSTR strType, LPCTSTR strFormat, va_list valist)
{
CString strPart_Prefix;
if(!s_strLogPrefix.IsEmpty())
{
strPart_Prefix.Format(_T("[%s]"), s_strLogPrefix);
}
CString strPart_Time;
{
SYSTEMTIME sysTime = {0};
GetLocalTime(&sysTime);
strPart_Time.Format(_T("[%2d-%2d %2d:%2d:%2d_%3d]"),
sysTime.wMonth, sysTime.wDay,
sysTime.wHour, sysTime.wMinute, sysTime.wSecond,
sysTime.wMilliseconds);
}
CString strPart_Type;
if(strType && strType[0])
{
strPart_Type.Format(_T("[%s]"), strType);
}
CString strPart_Info;
{
strPart_Info.FormatV(strFormat, valist);
}
CString str = strPart_Prefix + strPart_Time + strPart_Type+ strPart_Info;
return str;
}
CString LOG::sOut0
{
va_list valist;
va_start(valist, strFormat);
CString strInfo = sOutV(strType, strFormat, valist);
va_end(valist);
return strInfo;
}
CString LOG::sOut(LPCTSTR strFormat,...)
{
va_list valist;
va_start(valist, strFormat);
CString strInfo = sOutV(NULL, strFormat, valist);
va_end(valist);
return strInfo;
}
short LOG::OutV(LPCTSTR strType, LPCTSTR strFormat, va_list valist)
{
//--
if(s_hWriteEvent==NULL)
{
s_hWriteEvent = OpenEvent(0, FALSE,LOG_EVENT);
if(s_hWriteEvent==NULL)
s_hWriteEvent = CreateEvent(NULL, FALSE, TRUE, LOG_EVENT);
}
WaitForSingleObject(s_hWriteEvent, INFINITE);
//-開啟關閉檔案