158 lines
3.3 KiB
C++
158 lines
3.3 KiB
C++
/******************************************************************************
|
|
|
|
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 );
|
|
}
|