initial
This commit is contained in:
123
tier2/tier2_logging.cpp
Normal file
123
tier2/tier2_logging.cpp
Normal file
@@ -0,0 +1,123 @@
|
||||
//============ Copyright (c) Valve Corporation, All rights reserved. ============
|
||||
//
|
||||
// Tier2 logging helpers.
|
||||
//
|
||||
//===============================================================================
|
||||
|
||||
#include "tier2_logging.h"
|
||||
#include "filesystem.h"
|
||||
#include "interfaces/interfaces.h"
|
||||
|
||||
CFileLoggingListener::CFileLoggingListener()
|
||||
{
|
||||
for ( int i = 0; i < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT; ++ i )
|
||||
{
|
||||
m_OpenFiles[i].Reset();
|
||||
}
|
||||
for ( int i = 0; i < MAX_LOGGING_CHANNEL_COUNT; ++ i )
|
||||
{
|
||||
m_FileIndices[i] = INVALID_LOGGING_FILE_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
CFileLoggingListener::~CFileLoggingListener()
|
||||
{
|
||||
for ( int i = 0; i < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT; ++ i )
|
||||
{
|
||||
if ( m_OpenFiles[i].IsOpen() )
|
||||
{
|
||||
g_pFullFileSystem->Close( m_OpenFiles[i].m_FileHandle );
|
||||
m_OpenFiles[i].Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LoggingFileHandle_t CFileLoggingListener::BeginLoggingToFile( const char *pFilename, const char *pOptions, const char *pPathID /* = NULL */ )
|
||||
{
|
||||
int fileHandle = GetUnusedFileInfo();
|
||||
if ( fileHandle != INVALID_LOGGING_FILE_HANDLE )
|
||||
{
|
||||
m_OpenFiles[fileHandle].m_FileHandle = g_pFullFileSystem->Open( pFilename, pOptions, pPathID );
|
||||
}
|
||||
return fileHandle;
|
||||
}
|
||||
|
||||
void CFileLoggingListener::EndLoggingToFile( LoggingFileHandle_t fileHandle )
|
||||
{
|
||||
Assert( fileHandle >= 0 && fileHandle < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT );
|
||||
/* if the file had any channels associated with it, disassociate them. */
|
||||
if ( fileHandle != INVALID_LOGGING_FILE_HANDLE )
|
||||
{
|
||||
for ( int i = 0 ; i < MAX_LOGGING_CHANNEL_COUNT ; ++i )
|
||||
{
|
||||
if ( m_FileIndices[i] == fileHandle )
|
||||
UnassignLogChannel( i );
|
||||
}
|
||||
}
|
||||
|
||||
g_pFullFileSystem->Close( m_OpenFiles[fileHandle].m_FileHandle );
|
||||
m_OpenFiles[fileHandle].Reset();
|
||||
}
|
||||
|
||||
void CFileLoggingListener::AssignLogChannel( LoggingChannelID_t channelID, LoggingFileHandle_t loggingFileHandle )
|
||||
{
|
||||
Assert( loggingFileHandle >= 0 && loggingFileHandle < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT );
|
||||
Assert( m_OpenFiles[loggingFileHandle].IsOpen() );
|
||||
Assert( channelID >= 0 && channelID < MAX_LOGGING_CHANNEL_COUNT );
|
||||
m_FileIndices[channelID] = loggingFileHandle;
|
||||
}
|
||||
|
||||
void CFileLoggingListener::UnassignLogChannel( LoggingChannelID_t channelID )
|
||||
{
|
||||
Assert( channelID >= 0 && channelID < MAX_LOGGING_CHANNEL_COUNT );
|
||||
m_FileIndices[channelID] = INVALID_LOGGING_FILE_HANDLE;
|
||||
}
|
||||
|
||||
void CFileLoggingListener::AssignAllLogChannels( LoggingFileHandle_t loggingFileHandle )
|
||||
{
|
||||
Assert( loggingFileHandle >= 0 && loggingFileHandle < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT );
|
||||
Assert( m_OpenFiles[loggingFileHandle].IsOpen() );
|
||||
for ( int i = 0; i < MAX_LOGGING_CHANNEL_COUNT; ++ i )
|
||||
{
|
||||
m_FileIndices[i] = loggingFileHandle;
|
||||
}
|
||||
}
|
||||
|
||||
void CFileLoggingListener::UnassignAllLogChannels()
|
||||
{
|
||||
for ( int i = 0; i < MAX_LOGGING_CHANNEL_COUNT; ++ i )
|
||||
{
|
||||
m_FileIndices[i] = INVALID_LOGGING_FILE_HANDLE;
|
||||
}
|
||||
}
|
||||
|
||||
void CFileLoggingListener::Log( const LoggingContext_t *pContext, const char *pMessage )
|
||||
{
|
||||
if ( ( pContext->m_Flags & LCF_CONSOLE_ONLY ) != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
Assert( pContext->m_ChannelID >= 0 && pContext->m_ChannelID < MAX_LOGGING_CHANNEL_COUNT );
|
||||
int nFileIndex = m_FileIndices[pContext->m_ChannelID];
|
||||
if ( nFileIndex >= 0 && nFileIndex < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT )
|
||||
{
|
||||
// Shouldn't be trying to log to a closed file.
|
||||
Assert( m_OpenFiles[nFileIndex].IsOpen() );
|
||||
|
||||
g_pFullFileSystem->Write( pMessage, Q_strlen( pMessage ), m_OpenFiles[nFileIndex].m_FileHandle );
|
||||
g_pFullFileSystem->Flush( m_OpenFiles[nFileIndex].m_FileHandle );
|
||||
}
|
||||
}
|
||||
|
||||
int CFileLoggingListener::GetUnusedFileInfo() const
|
||||
{
|
||||
for ( int i = 0; i < MAX_SIMULTANEOUS_LOGGING_FILE_COUNT; ++ i )
|
||||
{
|
||||
if ( !m_OpenFiles[i].IsOpen() )
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return INVALID_LOGGING_FILE_HANDLE;
|
||||
}
|
||||
Reference in New Issue
Block a user