windows-nt/Source/XPSP1/NT/inetsrv/iis/ui/itools/linkchk/errlog.cpp
2020-09-26 16:20:57 +08:00

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