1
0
cuberite-2a/source/cLog.cpp
faketruth d21e4dacf7 Compiles on Android! Added Eclipse project, import it into your workspace and it should be runnable on Android!
Disabled Squirrel for Android
cLog now logs to Android LogCat as well
Fixed Lua so it compiles on Android
Removed/commented out exceptions in JsonCpp so it compiles on Android

git-svn-id: http://mc-server.googlecode.com/svn/trunk@741 0a769ca7-a7f5-676a-18bf-c427514a06d6
2012-08-15 21:24:11 +00:00

167 lines
2.3 KiB
C++

#include "Globals.h" // NOTE: MSVC stupidness requires this to be the same across all modules
#include "cLog.h"
#include <fstream>
#include <ctime>
#include "cMakeDir.h"
#include "cIsThread.h"
#if defined(ANDROID_NDK)
#include <android/log.h>
#endif
cLog* cLog::s_Log = NULL;
cLog::cLog(const AString & a_FileName )
: m_File(NULL)
{
s_Log = this;
// create logs directory
cMakeDir::MakeDir("logs");
OpenLog( (std::string("logs/") + a_FileName).c_str() );
}
cLog::~cLog()
{
CloseLog();
s_Log = NULL;
}
cLog* cLog::GetInstance()
{
if(s_Log)
return s_Log;
new cLog("log.txt");
return s_Log;
}
void cLog::CloseLog()
{
if( m_File )
fclose (m_File);
m_File = 0;
}
void cLog::OpenLog( const char* a_FileName )
{
if(m_File) fclose (m_File);
#ifdef _WIN32
fopen_s( &m_File, a_FileName, "a+" );
#else
m_File = fopen(a_FileName, "a+" );
#endif
}
void cLog::ClearLog()
{
#ifdef _WIN32
if( fopen_s( &m_File, "log.txt", "w" ) == 0)
fclose (m_File);
#else
m_File = fopen("log.txt", "w" );
if( m_File )
fclose (m_File);
#endif
m_File = 0;
}
void cLog::Log(const char * a_Format, va_list argList)
{
#if defined(ANDROID_NDK)
__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList);
return; // This is as far as android goes
#endif
AString Message;
AppendVPrintf(Message, a_Format, argList);
time_t rawtime;
time ( &rawtime );
struct tm* timeinfo;
#ifdef _WIN32
struct tm timeinforeal;
timeinfo = &timeinforeal;
localtime_s(timeinfo, &rawtime );
#else
timeinfo = localtime( &rawtime );
#endif
AString Line;
#ifdef _DEBUG
Printf(Line, "[%04x|%02d:%02d:%02d] %s\n", cIsThread::GetCurrentID(), timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, Message.c_str());
#else
Printf(Line, "[%02d:%02d:%02d] %s\n", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, Message.c_str());
#endif
if (m_File)
{
fputs(Line.c_str(), m_File);
fflush(m_File);
}
// Print to console:
printf("%s", Line.c_str());
#if defined (_WIN32) && defined(_DEBUG)
// In a Windows Debug build, output the log to debug console as well:
OutputDebugString(Line.c_str());
#endif // _WIN32
}
void cLog::Log(const char* a_Format, ...)
{
va_list argList;
va_start(argList, a_Format);
Log( a_Format, argList );
va_end(argList);
}
void cLog::SimpleLog(const char* a_String)
{
Log("%s", a_String );
}