|
|
/******************************************************************************
Copyright (c) 2001 Microsoft Corporation
Module Name: Logger.cpp
Abstract: This file contains the implementation of the Taxonomy::Logger class, which is used during database updates.
Revision History: Davide Massarenti (Dmassare) 24/03/2001 created
******************************************************************************/
#include "stdafx.h"
Taxonomy::Logger::Logger() { // MPC::FileLog m_obj;
m_dwLogging = 0; // DWORD m_dwLogging;
}
Taxonomy::Logger::~Logger() { if(m_dwLogging) { WriteLog( E_FAIL, L"Forcing closure of log file." ); EndLog ( ); } }
HRESULT Taxonomy::Logger::StartLog( /*[in]*/ LPCWSTR szLocation ) { __HCP_FUNC_ENTRY( "Taxonomy::Logger::StartLog" );
HRESULT hr;
if(m_dwLogging++ == 0) { MPC::wstring szFile( szLocation ? szLocation : HC_HCUPDATE_LOGNAME ); MPC::SubstituteEnvVariables( szFile );
// Attempt to open the log for writing
__MPC_EXIT_IF_METHOD_FAILS(hr, m_obj.SetLocation( szFile.c_str() ));
// write it out to log file
__MPC_EXIT_IF_METHOD_FAILS(hr, WriteLog( -1, L"===========================================\nHCUPDATE Log started\n===========================================" )); }
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr); }
HRESULT Taxonomy::Logger::EndLog() { __HCP_FUNC_ENTRY( "Taxonomy::Logger::EndLog" );
HRESULT hr;
if(m_dwLogging > 0) { if(m_dwLogging == 1) { (void)WriteLog( -1, L"===========================================\nHCUPDATE Log ended\n===========================================" );
__MPC_EXIT_IF_METHOD_FAILS(hr, m_obj.Terminate()); }
m_dwLogging--; }
hr = S_OK;
__HCP_FUNC_CLEANUP;
__HCP_FUNC_EXIT(hr); }
HRESULT Taxonomy::Logger::WriteLogV( /*[in]*/ HRESULT hrRes , /*[in]*/ LPCWSTR szLogFormat , /*[in]*/ va_list arglist ) { __HCP_FUNC_ENTRY( "Taxonomy::Logger::WriteLogV" );
HRESULT hr; WCHAR rgLine[256]; WCHAR* pLine = NULL; WCHAR* pLinePtr;
if(_vsnwprintf( rgLine, MAXSTRLEN(rgLine), szLogFormat, arglist ) == -1) { const int iSizeMax = 8192;
__MPC_EXIT_IF_ALLOC_FAILS(hr, pLine, new WCHAR[iSizeMax]);
_vsnwprintf( pLine, iSizeMax-1, szLogFormat, arglist ); pLine[iSizeMax-1] = 0;
pLinePtr = pLine; } else { rgLine[MAXSTRLEN(rgLine)] = 0;
pLinePtr = rgLine; }
if(hrRes == -2) { hrRes = HRESULT_FROM_WIN32(::GetLastError()); }
if(hrRes == -1) { hrRes = S_OK;
if(m_dwLogging) { __MPC_EXIT_IF_METHOD_FAILS(hr, m_obj.LogRecord( L"%s", pLinePtr )); } } else { if(m_dwLogging) { __MPC_EXIT_IF_METHOD_FAILS(hr, m_obj.LogRecord( L"%x - %s", hrRes, pLinePtr )); } }
hr = S_OK;
__HCP_FUNC_CLEANUP;
delete [] pLine;
if(FAILED(hrRes)) hr = hrRes;
__HCP_FUNC_EXIT(hr); }
HRESULT Taxonomy::Logger::WriteLog( /*[in]*/ HRESULT hrRes , /*[in]*/ LPCWSTR szLogFormat , /*[in]*/ ... ) { va_list arglist;
va_start( arglist, szLogFormat );
return WriteLogV( hrRes, szLogFormat, arglist ); }
|