//======================================================================= // // Copyright (c) 1998-1999 Microsoft Corporation. All Rights Reserved. // // File: log.cpp // // Original Author: Yan Leshinsky // // Description: // // Logging support implementation // //======================================================================= #if 1 #include #include #include #include #include #include #include "cdmlibp.h" const TCHAR* LIVE_LOG_FILENAME = _T("c:\\wuv3live.log"); FILE* CLogger::c_pfile = stdout; int CLogger::c_cnIndent = 0; int CLogger::c_cnLevels = -1; CLogger::CLogger( const char* szBlockName /*= 0*/, int nLoggingLevel/*= 0*/, const char* szFileName/*= 0*/, int nLine/*= 0*/ ) { USES_CONVERSION; if (-1 == c_cnLevels) { c_cnLevels = 0; auto_hkey hkey; if (NO_ERROR == RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY_WUV3TEST, 0, KEY_READ, &hkey)) { DWORD dwSize = sizeof(c_cnLevels); RegQueryValueEx(hkey, _T("LogLevel"), 0, 0, (LPBYTE)&c_cnLevels, &dwSize); TCHAR szLogFile[MAX_PATH] = {0}; #ifdef _WUV3TEST // RAID# 156253 dwSize = sizeof(szLogFile); RegQueryValueEx(hkey, _T("LogFile"), 0, 0, (LPBYTE)&szLogFile, &dwSize); #else // Hardwire log to root of c: for "Live" controls _tcscpy(szLogFile, LIVE_LOG_FILENAME); #endif FILE* pfile = _tfopen(szLogFile, _T("at")); if (pfile) c_pfile = pfile; } } m_szBlockName[0] = 0; m_fOut = nLoggingLevel < c_cnLevels; if (m_fOut && NULL != szBlockName) { strncpy(m_szBlockName, szBlockName, sizeOfArray(m_szBlockName)); #ifdef _WUV3TEST // RAID# 146771 out("%s %s(%d)", A2T(const_cast(szBlockName)), A2T(const_cast(szFileName)), nLine); #else out("%s", A2T(const_cast(szBlockName))); #endif m_dwStartTick = GetTickCount(); c_cnIndent ++; } } CLogger::~CLogger() { USES_CONVERSION; if (m_fOut && NULL != m_szBlockName[0]) { c_cnIndent --; out("~%s (%d msecs)", A2T(const_cast(m_szBlockName)), GetTickCount() - m_dwStartTick); } } void __cdecl CLogger::out(const char *szFormat, ...) { if (m_fOut) { va_list va; va_start (va, szFormat); tab_out(); v_out(szFormat, va); va_end (va); } } void __cdecl CLogger::error(const char *szFormat, ...) { USES_CONVERSION; if (m_fOut) { va_list va; va_start (va, szFormat); tab_out(); _fputts(_T("ERROR - "), c_pfile); v_out(szFormat, va); va_end (va); } } void __cdecl CLogger::out1(const char *szFormat, ...) { CLogger logger; va_list va; va_start (va, szFormat); logger.v_out(szFormat, va); va_end (va); } void CLogger::v_out( const char* szFormat, va_list va) { USES_CONVERSION; _vftprintf(c_pfile, A2T(const_cast(szFormat)), va); _fputtc(_T('\n'), c_pfile); fflush(c_pfile); } #endif