LogMgr.cpp
上传用户:liguizhu
上传日期:2015-11-01
资源大小:2422k
文件大小:3k
源码类别:

P2P编程

开发平台:

Visual C++

  1. /*
  2. *  Openmysee
  3. *
  4. *  This program is free software; you can redistribute it and/or modify
  5. *  it under the terms of the GNU General Public License as published by
  6. *  the Free Software Foundation; either version 2 of the License, or
  7. *  (at your option) any later version.
  8. *
  9. *  This program is distributed in the hope that it will be useful,
  10. *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. *  GNU General Public License for more details.
  13. *
  14. *  You should have received a copy of the GNU General Public License
  15. *  along with this program; if not, write to the Free Software
  16. *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  17. *
  18. */
  19. #include "stdafx.h"
  20. #include "LogMgr.h"
  21. LogMgr::LogMgr() : fp(NULL) {
  22. m_bPrintTime = TRUE;
  23. m_tBuf[0] = 0;
  24. Init();
  25. }
  26. LogMgr::~LogMgr() {
  27. Uninit();
  28. }
  29. void LogMgr::Init() {
  30. char buf[MAX_PATH+1];
  31.     DWORD res = ::GetModuleFileName(NULL, buf, MAX_PATH);
  32. m_csFileName = buf;
  33.     m_csFileName.resize(m_csFileName.find_last_of('\')+1);
  34. RemoveOldTmpFile(buf);
  35. sprintf(buf, "#CL%d.tmp", GetTickCount());
  36. m_csFileName.append(buf);
  37. fp = fopen(m_csFileName.data(), "w");
  38. }
  39. void LogMgr::Uninit() {
  40. if(fp)
  41. fclose(fp);
  42. DeleteFile(m_csFileName.data());
  43. }
  44. void LogMgr::StatusOut(const char* fmt, ...) {
  45. #ifdef NDEBUG
  46. return;
  47. #endif
  48. if(!fp || !fmt)
  49. return;
  50. m_tBuf[0] = 0;
  51. if(m_bPrintTime) {
  52. struct tm *newtime;
  53. time_t long_time;
  54. time( &long_time );                /* Get time as long integer. */
  55. newtime = localtime( &long_time ); /* Convert to local time. */
  56. sprintf(m_tBuf, "%.8s: ", asctime(newtime)+11);
  57. }
  58. // parse that string format
  59. try {
  60. va_list argptr;
  61. va_start(argptr, fmt);
  62. _vsnprintf(m_tBuf+strlen(m_tBuf), TBUF_SIZE, fmt, argptr);
  63. va_end(argptr);
  64. #ifdef _DEBUG
  65. printf("%sn", m_tBuf);
  66. #endif
  67. fprintf(fp, "%sn", m_tBuf);
  68. fflush(fp);
  69. }
  70. catch(...) {
  71. m_tBuf[0] = 0;
  72. }
  73. }
  74. void LogMgr::StatusErr(const char* title, int errcode) {
  75. #ifdef NDEBUG
  76. return;
  77. #endif
  78. LPVOID lpMsgBuf;
  79. FormatMessage( 
  80. FORMAT_MESSAGE_ALLOCATE_BUFFER | 
  81. FORMAT_MESSAGE_FROM_SYSTEM | 
  82. FORMAT_MESSAGE_IGNORE_INSERTS,
  83. NULL,
  84. errcode,
  85. MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
  86. (LPTSTR) &lpMsgBuf,
  87. 0,
  88. NULL 
  89. );
  90. StatusOut("%s. Error(%d): %s", title, errcode, (LPCTSTR)lpMsgBuf);
  91. LocalFree(lpMsgBuf);
  92. }
  93. void LogMgr::RemoveOldTmpFile(const char* tmpPath) {
  94. if(!tmpPath)
  95. return;
  96. WIN32_FIND_DATA fileData;
  97. string match = tmpPath;
  98. match.append("#CL*.tmp");
  99. HANDLE hFind = FindFirstFile(match.data(), &fileData);
  100. if(hFind == INVALID_HANDLE_VALUE)
  101. return;
  102. while(1) {
  103. string path = tmpPath;
  104. path.append(fileData.cFileName);
  105. DeleteFile(path.data());
  106. if(!FindNextFile(hFind, &fileData)) {
  107. if(GetLastError() == ERROR_NO_MORE_FILES)
  108. break;
  109. else
  110. return; 
  111. }
  112. }
  113. FindClose(hFind);
  114. }