From 386d58b5862d8b76925c6523721594887606e82a Mon Sep 17 00:00:00 2001 From: faketruth Date: Mon, 3 Oct 2011 18:41:19 +0000 Subject: MCServer c++ source files git-svn-id: http://mc-server.googlecode.com/svn/trunk@3 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/cLog.cpp | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 source/cLog.cpp (limited to 'source/cLog.cpp') diff --git a/source/cLog.cpp b/source/cLog.cpp new file mode 100644 index 000000000..105916a2f --- /dev/null +++ b/source/cLog.cpp @@ -0,0 +1,136 @@ +#include "cLog.h" +#include +#include +#include + +#ifdef _WIN32 +#include +#else +#include // for mkdir +#include + +#define sprintf_s(buffer, buffer_size, stringbuffer, ...) (sprintf(buffer, stringbuffer, __VA_ARGS__)) +#define vsnprintf_s(buffer, buffer_size, maxcount, stringbuffer, ...) (vsnprintf(buffer, maxcount, stringbuffer, __VA_ARGS__)) +#endif + +#include + +cLog* cLog::s_Log = NULL; + +cLog::cLog( const char* a_FileName ) + : m_File(NULL) +{ + s_Log = this; + + // create logs directory +#ifdef _WIN32 + { + SECURITY_ATTRIBUTES Attrib; + Attrib.nLength = sizeof(SECURITY_ATTRIBUTES); + Attrib.lpSecurityDescriptor = NULL; + Attrib.bInheritHandle = false; + ::CreateDirectory("logs", &Attrib); + } +#else + { + mkdir("logs", S_IRWXU | S_IRWXG | S_IRWXO); + } +#endif + + OpenLog( (std::string("logs/") + std::string(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 ) +{ + char c_Buffer[1024]; + + if( argList != 0 ) + { + vsnprintf_s(c_Buffer, 1024, 1024, a_Format, argList ); + } + else + { + sprintf_s( c_Buffer, 1024, "%s", a_Format ); + } + + time_t rawtime; + time ( &rawtime ); +#ifdef _WIN32 + struct tm timeinfo; + localtime_s( &timeinfo, &rawtime ); +#else + struct tm* timeinfo; + timeinfo = localtime( &rawtime ); +#endif + char c_Buffer2[1024]; +#ifdef _WIN32 + sprintf_s(c_Buffer2, 1024, "[%02d:%02d:%02d] %s\n", timeinfo.tm_hour, timeinfo.tm_min, timeinfo.tm_sec, c_Buffer); +#else + sprintf(c_Buffer2, "[%02d:%02d:%02d] %s\n", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, c_Buffer); +#endif + if(m_File){ + fputs(c_Buffer2, m_File); + fflush(m_File); + } + + + printf("%s", c_Buffer2 ); +} + +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 ); +} -- cgit v1.2.3