156 lines
3.2 KiB
C++
156 lines
3.2 KiB
C++
|
#include "cMCLogger.h"
|
||
|
#include "cLog.h"
|
||
|
#include "cCriticalSection.h"
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <cstdarg>
|
||
|
#include <time.h>
|
||
|
|
||
|
#ifndef _WIN32
|
||
|
#define sprintf_s(buffer, buffer_size, stringbuffer, ...) (sprintf(buffer, stringbuffer, __VA_ARGS__))
|
||
|
#else
|
||
|
#include <Windows.h>
|
||
|
#endif
|
||
|
|
||
|
cMCLogger* cMCLogger::s_MCLogger = 0;
|
||
|
|
||
|
cMCLogger* cMCLogger::GetInstance()
|
||
|
{
|
||
|
return s_MCLogger;
|
||
|
}
|
||
|
|
||
|
cMCLogger::cMCLogger()
|
||
|
{
|
||
|
m_CriticalSection = new cCriticalSection();
|
||
|
char c_Buffer[128];
|
||
|
sprintf_s(c_Buffer, 128, "LOG_%d.txt", (int)time(0) );
|
||
|
m_Log = new cLog(c_Buffer);
|
||
|
m_Log->Log("--- Started Log ---");
|
||
|
|
||
|
s_MCLogger = this;
|
||
|
}
|
||
|
|
||
|
cMCLogger::cMCLogger( char* a_File )
|
||
|
{
|
||
|
m_CriticalSection = new cCriticalSection();
|
||
|
m_Log = new cLog( a_File );
|
||
|
}
|
||
|
|
||
|
cMCLogger::~cMCLogger()
|
||
|
{
|
||
|
m_Log->Log("--- Stopped Log ---");
|
||
|
delete m_Log;
|
||
|
delete m_CriticalSection;
|
||
|
if( this == s_MCLogger )
|
||
|
s_MCLogger = 0;
|
||
|
}
|
||
|
|
||
|
void cMCLogger::LogSimple(const char* a_Text, int a_LogType /* = 0 */ )
|
||
|
{
|
||
|
switch( a_LogType )
|
||
|
{
|
||
|
case 0:
|
||
|
Log(a_Text, 0);
|
||
|
break;
|
||
|
case 1:
|
||
|
Info(a_Text, 0);
|
||
|
break;
|
||
|
case 2:
|
||
|
Warn(a_Text, 0);
|
||
|
break;
|
||
|
case 3:
|
||
|
Error(a_Text, 0);
|
||
|
break;
|
||
|
default:
|
||
|
Log(a_Text, 0);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void cMCLogger::Log(const char* a_Format, va_list a_ArgList)
|
||
|
{
|
||
|
m_CriticalSection->Lock();
|
||
|
SetColor( 0x7 ); // 0x7 is default grey color
|
||
|
m_Log->Log( a_Format, a_ArgList );
|
||
|
m_CriticalSection->Unlock();
|
||
|
}
|
||
|
|
||
|
void cMCLogger::Info(const char* a_Format, va_list a_ArgList)
|
||
|
{
|
||
|
m_CriticalSection->Lock();
|
||
|
// for( int i = 0; i < 16; i++)
|
||
|
// {
|
||
|
// for( int j = 0; j < 16; j++ )
|
||
|
// {
|
||
|
// SetConsoleTextAttribute( hConsole, i | (j<<4) );
|
||
|
// printf("0x%x", (i|j<<4));
|
||
|
// }
|
||
|
// printf("\n");
|
||
|
// }
|
||
|
|
||
|
SetColor( 0xe ); // 0xe is yellow
|
||
|
m_Log->Log( a_Format, a_ArgList );
|
||
|
m_CriticalSection->Unlock();
|
||
|
}
|
||
|
|
||
|
void cMCLogger::Warn(const char* a_Format, va_list a_ArgList)
|
||
|
{
|
||
|
m_CriticalSection->Lock();
|
||
|
SetColor( 0xc ); // 0xc is red
|
||
|
m_Log->Log( a_Format, a_ArgList );
|
||
|
m_CriticalSection->Unlock();
|
||
|
}
|
||
|
|
||
|
void cMCLogger::Error(const char* a_Format, va_list a_ArgList)
|
||
|
{
|
||
|
m_CriticalSection->Lock();
|
||
|
SetColor( 0xc0 ); // 0xc0 is red bg and black text
|
||
|
m_Log->Log( a_Format, a_ArgList );
|
||
|
m_CriticalSection->Unlock();
|
||
|
}
|
||
|
|
||
|
void cMCLogger::SetColor( unsigned char a_Color )
|
||
|
{
|
||
|
#ifdef _WIN32
|
||
|
HANDLE hConsole = GetStdHandle( STD_OUTPUT_HANDLE );
|
||
|
SetConsoleTextAttribute( hConsole, a_Color );
|
||
|
#else
|
||
|
(void)a_Color;
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////
|
||
|
// Global functions
|
||
|
void LOG(const char* a_Format, ...)
|
||
|
{
|
||
|
va_list argList;
|
||
|
va_start(argList, a_Format);
|
||
|
cMCLogger::GetInstance()->Log( a_Format, argList );
|
||
|
va_end(argList);
|
||
|
}
|
||
|
|
||
|
void LOGINFO(const char* a_Format, ...)
|
||
|
{
|
||
|
va_list argList;
|
||
|
va_start(argList, a_Format);
|
||
|
cMCLogger::GetInstance()->Info( a_Format, argList );
|
||
|
va_end(argList);
|
||
|
}
|
||
|
|
||
|
void LOGWARN(const char* a_Format, ...)
|
||
|
{
|
||
|
va_list argList;
|
||
|
va_start(argList, a_Format);
|
||
|
cMCLogger::GetInstance()->Warn( a_Format, argList );
|
||
|
va_end(argList);
|
||
|
}
|
||
|
|
||
|
void LOGERROR(const char* a_Format, ...)
|
||
|
{
|
||
|
va_list argList;
|
||
|
va_start(argList, a_Format);
|
||
|
cMCLogger::GetInstance()->Error( a_Format, argList );
|
||
|
va_end(argList);
|
||
|
}
|