270 lines
4 KiB
C++
270 lines
4 KiB
C++
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
errlog.cpp
|
|
|
|
Abstract:
|
|
|
|
Error logging object implementation. This object will log the link
|
|
checking error according to the user options (CUserOptions)
|
|
|
|
Author:
|
|
|
|
Michael Cheuk (mcheuk)
|
|
|
|
Project:
|
|
|
|
Link Checker
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
#include "stdafx.h"
|
|
#include "errlog.h"
|
|
|
|
#include "lcmgr.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
// Constant string (TODO: put this in resource)
|
|
const CString strHeaderText_c(_T("Start Link Checker"));
|
|
const CString strFooterText_c(_T("End Link Checker"));
|
|
const CString strWininetError_c(_T("Internet Error"));
|
|
|
|
CErrorLog::~CErrorLog(
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Destructor.
|
|
|
|
Arguments:
|
|
|
|
N/A
|
|
|
|
Return Value:
|
|
|
|
N/A
|
|
|
|
--*/
|
|
{
|
|
if(m_LogFile.m_hFile != CFile::hFileNull)
|
|
{
|
|
try
|
|
{
|
|
m_LogFile.Close();
|
|
}
|
|
catch(CFileException* pEx)
|
|
{
|
|
ASSERT(FALSE);
|
|
pEx->Delete();
|
|
}
|
|
}
|
|
|
|
} // CErrorLog::~CErrorLog
|
|
|
|
|
|
BOOL
|
|
CErrorLog::Create(
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Create this object. You must call this before using CErrorLog
|
|
|
|
Arguments:
|
|
|
|
N/A
|
|
|
|
Return Value:
|
|
|
|
BOOL - TRUE if sucess. FALSE otherwise
|
|
|
|
--*/
|
|
{
|
|
// Get the user input log filename
|
|
const CString& strLogFilename = GetLinkCheckerMgr().GetUserOptions().GetLogFilename();
|
|
|
|
// Create the file
|
|
if(GetLinkCheckerMgr().GetUserOptions().IsLogToFile() &&
|
|
!strLogFilename.IsEmpty())
|
|
{
|
|
if(m_LogFile.Open(
|
|
strLogFilename,
|
|
CFile::modeCreate | CFile::modeNoTruncate |
|
|
CFile::shareDenyWrite | CFile::modeWrite))
|
|
{
|
|
try
|
|
{
|
|
m_LogFile.SeekToEnd();
|
|
}
|
|
catch(CFileException* pEx)
|
|
{
|
|
ASSERT(FALSE);
|
|
pEx->Delete();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
} // CErrorLog::Create
|
|
|
|
|
|
void
|
|
CErrorLog::Write(
|
|
const CLink& link)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Write to log
|
|
|
|
Arguments:
|
|
|
|
N/A
|
|
|
|
Return Value:
|
|
|
|
N/A
|
|
|
|
--*/
|
|
{
|
|
// Make sure the link is invalid
|
|
ASSERT(link.GetState() == CLink::eInvalidHTTP ||
|
|
link.GetState() == CLink::eInvalidWininet);
|
|
|
|
if(m_LogFile.m_hFile != CFile::hFileNull)
|
|
{
|
|
CString strDateTime = link.GetTime().Format("%x\t%X");
|
|
|
|
CString strLog;
|
|
|
|
if(link.GetState() == CLink::eInvalidHTTP)
|
|
{
|
|
strLog.Format(_T("%s\t%s\t%s\t%s\t%d\t%s\t%s\n"),
|
|
link.GetBase(), m_strBrowser,
|
|
m_strLanguage, strDateTime,
|
|
link.GetStatusCode(), link.GetStatusText(), link.GetRelative());
|
|
}
|
|
else if(link.GetState() == CLink::eInvalidWininet)
|
|
{
|
|
strLog.Format(_T("%s\t%s\t%s\t%s\t%s\t%s\t%s\n"),
|
|
link.GetBase(), m_strBrowser,
|
|
m_strLanguage, strDateTime,
|
|
strWininetError_c, link.GetStatusText(), link.GetRelative());
|
|
}
|
|
|
|
try
|
|
{
|
|
m_LogFile.Write(strLog, strLog.GetLength());
|
|
m_LogFile.Flush();
|
|
}
|
|
catch(CFileException* pEx)
|
|
{
|
|
ASSERT(FALSE);
|
|
pEx->Delete();
|
|
}
|
|
}
|
|
|
|
} // CErrorLog::Write
|
|
|
|
|
|
void
|
|
CErrorLog::WriteHeader(
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Write the log header
|
|
|
|
Arguments:
|
|
|
|
N/A
|
|
|
|
Return Value:
|
|
|
|
N/A
|
|
|
|
--*/
|
|
{
|
|
if(m_LogFile.m_hFile != CFile::hFileNull)
|
|
{
|
|
CString strLog;
|
|
strLog.Format(_T("*** %s *** %s\n"), strHeaderText_c,
|
|
CTime::GetCurrentTime().Format("%x\t%X"));
|
|
|
|
try
|
|
{
|
|
m_LogFile.Write(strLog, strLog.GetLength());
|
|
m_LogFile.Flush();
|
|
}
|
|
catch(CFileException* pEx)
|
|
{
|
|
ASSERT(FALSE);
|
|
pEx->Delete();
|
|
}
|
|
}
|
|
|
|
} // CErrorLog::WriteHeader
|
|
|
|
|
|
void
|
|
CErrorLog::WriteFooter(
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Write the log footer
|
|
|
|
Arguments:
|
|
|
|
N/A
|
|
|
|
Return Value:
|
|
|
|
N/A
|
|
|
|
--*/
|
|
{
|
|
if(m_LogFile.m_hFile != CFile::hFileNull)
|
|
{
|
|
CString strLog;
|
|
strLog.Format(_T("*** %s *** %s\n"), strFooterText_c,
|
|
CTime::GetCurrentTime().Format(_T("%x\t%X")));
|
|
|
|
try
|
|
{
|
|
m_LogFile.Write(strLog, strLog.GetLength());
|
|
m_LogFile.Flush();
|
|
}
|
|
catch(CFileException* pEx)
|
|
{
|
|
ASSERT(FALSE);
|
|
pEx->Delete();
|
|
}
|
|
}
|
|
|
|
} // CErrorLog::WriteFooter
|