// Log.cpp: implementation of the CLog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Log.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
HANDLE CLog::m_hFile = NULL;
string CLog::m_sErrorMessage = "";
queue<string> CLog::m_qMessage;
CRITICAL_SECTION CLog::m_lock;
ostringstream CLog::m_stringstream;
BOOL CLog::m_bIsWorking = FALSE;
CLog::CLog()
{
}
CLog::~CLog()
{
}
BOOL CLog::Initial(string fileName, string directoryName /* = "" */)
{
char moduleNameChar[MAX_PATH];
if ( !GetCurrentDirectory(MAX_PATH,moduleNameChar) )
{
DWORD i = GetLastError();
char message[1024];
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
i,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
message,
1024,
NULL);
m_sErrorMessage = message;
return FALSE;
}
string moduleNameString = moduleNameChar;
if ( directoryName != "" )
{
moduleNameString = moduleNameString + "\\" + directoryName;
// create directory
if ( !CreateDirectory(moduleNameString.c_str(),NULL) )
{
DWORD i = GetLastError();
if ( 183 == i)
{ // 文件夹存在
}
else
{
DWORD i = GetLastError();
char message[1024];
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
i,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
message,
1024,
NULL);
m_sErrorMessage = message;
return FALSE;
}
}
}
moduleNameString = moduleNameString + "\\" + fileName;
if ( (m_hFile = CreateFile( moduleNameString.c_str(),
GENERIC_WRITE | GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL)) == INVALID_HANDLE_VALUE )
{
DWORD i = GetLastError();
char message[1024];
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
i,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
message,
1024,
NULL);
m_sErrorMessage = message;
return FALSE;
}
InitializeCriticalSection(&m_lock);
//begin write thread
m_bIsWorking = TRUE;
HANDLE hThread = CreateThread( NULL,
0,
WriteFileThread,
NULL,
0,
NULL);
if ( hThread == NULL)
{
m_bIsWorking = FALSE;
DWORD i = GetLastError();
char message[1024];
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
i,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
message,
1024,
NULL);
m_sErrorMessage = message;
return FALSE;
}
return TRUE;
}
BOOL CLog::CloseFile()
{
m_bIsWorking = FALSE;
if ( !CloseHandle((HANDLE)m_hFile) )
{
DWORD i = GetLastError();
char message[1024];
FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
i,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
message,
1024,
NULL);
m_sErrorMessage = message;
return FALSE;
}
return TRUE;
}
string CLog::GetCurTime()
{
SYSTEMTIME st;
GetLocalTime(&st);
m_stringstream.str("");
m_stringstream<<st.wYear<<"-"
<<st.wMonth<<"-"
<<st.wDay<<" "
<<st.wHour<<":"
<<st.wMinute<<":"
<<st.wSecond<<"\t\t";
// cout<<m_stringstream.str()<<endl;
return m_stringstream.str();
}
VOID CLog::Info(string message,...)
{
char buf[1024];
va_list ptr;
va_start( ptr, message );
vsprintf( buf, message.c_str(), ptr);
va_end( ptr );
message = buf;
EnterCriticalSection(&m_lock);
m_qMessage.push("\r\nINFO "+GetCurTime()+message);
LeaveCriticalSection(&m_lock);
}
VOID CLog::Warn(string message,...)
{
char buf[1024];
va_list ptr;
va_start( ptr, message );
vsprintf( buf, message.c_str(), ptr);
va_end( ptr );
message = buf;
EnterCriticalSection(&m_lock);
m_qMessage.push("\r\nWARN "+GetCurTime()+message);
LeaveCriticalSection(&m_lock);
}
VOID CLog::Erro(string message,...)
{
char buf[1024];
va_list ptr;
va_start( ptr, message );
vsprintf( buf, message.c_str(), ptr);
va_end( ptr );
message = buf;
EnterCriticalSection(&m_lock);
m_qMessage.push("\r\nERRO "+GetCurTime()+message);
LeaveCriticalSection(&m_lock);
}
string CLog::GetErrorMessage()
{
return m_sErrorMessage;
}
DWORD WINAPI CLog::WriteFileThread(LPVOID lp)
{
string tempMessage;
while (m_bIsWorking)
{
tempMessage = "";
EnterCriticalSection(&m_lock);
if (m_qMessage.size() != 0 )
{
tempMessage = m_qMessage.front();
m_qMessage.pop();
}
LeaveCriticalSection(&m_lock);
if ( m_hFile != INVALID_HANDLE_VALUE && tempMessage != "" )
{
SetFilePointer(m_hFile, 0, NULL, FILE_END);
DWORD out;
BOOL flag = WriteFile( m_hFile,
tempMessage.c_str(),
tempMessage.size(),
&out,
NULL);
}
// cout<<"after writefile"<<endl;
}
return 1;
}
没有合适的资源?快使用搜索试试~ 我知道了~
c++日志工具类 c++实现
共50个文件
html:28个
png:15个
css:3个
5星 · 超过95%的资源 需积分: 16 138 下载量 74 浏览量
2010-12-17
16:41:56
上传
评论 5
收藏 57KB RAR 举报
温馨提示
c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现c++日志工具类 c++实现
资源推荐
资源详情
资源评论
收起资源包目录
c++日志工具类.rar (50个子文件)
c++日志工具类
SRC
Log.h 3KB
Log.cpp 5KB
DOC
html
tabs.css 1KB
installdox 3KB
doxygen.css 10KB
tab_s.png 189B
tab_b.png 178B
_log_8cpp.html 4KB
search
all_7e.html 1KB
close.png 273B
all_77.html 1KB
functions_63.html 2KB
functions_69.html 2KB
search_l.png 604B
nomatches.html 461B
functions_65.html 1KB
classes_63.html 1KB
search_m.png 158B
all_69.html 2KB
all_63.html 2KB
search.js 20KB
functions_67.html 1KB
all_67.html 1KB
search_r.png 612B
functions_77.html 1KB
search.css 4KB
functions_7e.html 1KB
all_65.html 1KB
files_6c.html 1KB
all_6c.html 1KB
mag_sel.png 563B
files.html 4KB
_log_8h_source.html 8KB
nav_f.png 159B
doxygen.png 4KB
nav_h.png 97B
functions_func.html 4KB
classes.html 4KB
annotated.html 4KB
tab_a.png 140B
functions.html 5KB
tab_h.png 192B
closed.png 126B
bc_s.png 705B
class_c_log-members.html 5KB
_log_8h.html 4KB
index.html 3KB
class_c_log.html 17KB
_log_8cpp_source.html 21KB
open.png 118B
共 50 条
- 1
kovenzgf
- 粉丝: 3
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页