diff options
-rw-r--r-- | src/Log.cpp | 118 | ||||
-rw-r--r-- | src/Log.h | 11 | ||||
-rw-r--r-- | src/MCLogger.cpp | 14 |
3 files changed, 29 insertions, 114 deletions
diff --git a/src/Log.cpp b/src/Log.cpp index e7d3e0629..3938f2c24 100644 --- a/src/Log.cpp +++ b/src/Log.cpp @@ -100,29 +100,29 @@ void cLog::ClearLog() -bool cLog::LogReplaceLine(const char * a_Format, va_list argList) +void cLog::Log(const char * a_Format, va_list argList, bool a_ReplaceCurrentLine) { AString Message; AppendVPrintf(Message, a_Format, argList); time_t rawtime; - time(&rawtime); - + time ( &rawtime ); + struct tm* timeinfo; #ifdef _MSC_VER struct tm timeinforeal; timeinfo = &timeinforeal; - localtime_s(timeinfo, &rawtime); + localtime_s(timeinfo, &rawtime ); #else - timeinfo = localtime(&rawtime); + timeinfo = localtime( &rawtime ); #endif AString Line; -#ifdef _DEBUG + #ifdef _DEBUG Printf(Line, "[%04x|%02d:%02d:%02d] %s", cIsThread::GetCurrentID(), timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, Message.c_str()); -#else + #else Printf(Line, "[%02d:%02d:%02d] %s", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, Message.c_str()); -#endif + #endif if (m_File) { fprintf(m_File, "%s\n", Line.c_str()); @@ -132,7 +132,7 @@ bool cLog::LogReplaceLine(const char * a_Format, va_list argList) // Print to console: #if defined(ANDROID_NDK) //__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList); - __android_log_print(ANDROID_LOG_ERROR, "MCServer", "%s", Line.c_str()); + __android_log_print(ANDROID_LOG_ERROR, "MCServer", "%s", Line.c_str() ); //CallJavaFunction_Void_String(g_JavaThread, "AddToLog", Line ); #else size_t LineLength = Line.length(); @@ -140,103 +140,35 @@ bool cLog::LogReplaceLine(const char * a_Format, va_list argList) if (m_LastStringSize == 0) m_LastStringSize = LineLength; // Initialise m_LastStringSize - HANDLE Output = GetStdHandle(STD_OUTPUT_HANDLE); - - CONSOLE_SCREEN_BUFFER_INFO csbi; - GetConsoleScreenBufferInfo(Output, &csbi); - - if ((size_t)((csbi.srWindow.Right - csbi.srWindow.Left) + 1) < LineLength) + if (a_ReplaceCurrentLine) { - printf("\r%s", Line.c_str()); - return false; - } #ifdef _WIN32 - if (LineLength < m_LastStringSize) // If last printed line was longer than current, clear this line - { - for (size_t X = 0; X != m_LastStringSize + 1; ++X) + if (LineLength < m_LastStringSize) // If last printed line was longer than current, clear this line { - fputs(" ", stdout); + for (size_t X = 0; X != m_LastStringSize; ++X) + { + fputs(" ", stdout); + } } - } #else // _WIN32 - struct ttysize ts; -#ifdef TIOCGSIZE - ioctl(STDIN_FILENO, TIOCGSIZE, &ts); - if (ts.ts_cols < LineLength) - { - return false; - } -#elif defined(TIOCGWINSZ) - ioctl(STDIN_FILENO, TIOCGWINSZ, &ts); - if (ts.ts_cols < LineLength) - { - return false; - } -#else /* TIOCGSIZE */ - return false; + fputs("\033[K", stdout); // Clear current line #endif - fputs("\033[K", stdout); // Clear current line -#endif - printf("\r%s", Line.c_str()); + + printf("\r%s", Line.c_str()); + #ifdef __linux - fputs("\033[1B", stdout); // Move down one line + fputs("\033[1B", stdout); // Move down one line #endif // __linux + } + else + { + printf("%s", Line.c_str()); + } m_LastStringSize = LineLength; -#endif // ANDROID_NDK - -#if defined (_WIN32) && defined(_DEBUG) - // In a Windows Debug build, output the log to debug console as well: - OutputDebugStringA((Line + "\n").c_str()); -#endif // _WIN32 - - return true; -} - - - - - -void cLog::Log(const char * a_Format, va_list argList) -{ - AString Message; - AppendVPrintf(Message, a_Format, argList); - - time_t rawtime; - time ( &rawtime ); - - struct tm* timeinfo; -#ifdef _MSC_VER - 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", cIsThread::GetCurrentID(), timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, Message.c_str()); - #else - Printf(Line, "[%02d:%02d:%02d] %s", timeinfo->tm_hour, timeinfo->tm_min, timeinfo->tm_sec, Message.c_str()); - #endif - - if (m_File) - { - fprintf(m_File, "%s\n", Line.c_str()); - fflush(m_File); - } - - // Print to console: - #if defined(ANDROID_NDK) - //__android_log_vprint(ANDROID_LOG_ERROR,"MCServer", a_Format, argList); - __android_log_print(ANDROID_LOG_ERROR, "MCServer", "%s", Line.c_str() ); - //CallJavaFunction_Void_String(g_JavaThread, "AddToLog", Line ); - #else - printf("%s", Line.c_str()); - #endif - #if defined (_WIN32) && defined(_DEBUG) // In a Windows Debug build, output the log to debug console as well: OutputDebugStringA((Line + "\n").c_str()); @@ -8,29 +8,20 @@ class cLog { // tolua_export private: - FILE * m_File; static cLog * s_Log; size_t m_LastStringSize; - public: - cLog(const AString & a_FileName); ~cLog(); - - /** Replaces current line of console with given text. - Returns true if successful, false if not (screen too narrow etc.) */ - bool LogReplaceLine(const char * a_Format, va_list argList); - void Log(const char * a_Format, va_list argList); + void Log(const char * a_Format, va_list argList, bool a_ReplaceCurrentLine = false); void Log(const char * a_Format, ...); - // tolua_begin void SimpleLog(const char * a_String); void OpenLog(const char * a_FileName); void CloseLog(); void ClearLog(); static cLog* GetInstance(); - }; // tolua_end diff --git a/src/MCLogger.cpp b/src/MCLogger.cpp index 0828b7fe4..b7b826374 100644 --- a/src/MCLogger.cpp +++ b/src/MCLogger.cpp @@ -147,11 +147,7 @@ void cMCLogger::Log(const char * a_Format, va_list a_ArgList, bool a_ShouldRepla SetConsoleCursorPosition(Output, Position); SetColor(csRegular); - if (!m_Log->LogReplaceLine(a_Format, a_ArgList)) - { - m_BeginLineUpdate = false; - puts(""); - } + m_Log->Log(a_Format, a_ArgList, a_ShouldReplaceLine); ResetColor(); Position = { 0, csbi.dwCursorPosition.Y }; // Set cursor to original position @@ -159,18 +155,14 @@ void cMCLogger::Log(const char * a_Format, va_list a_ArgList, bool a_ShouldRepla #else // _WIN32 fputs("\033[1A", stdout); // Move cursor up one line SetColor(csRegular); - if (!m_Log->LogReplaceLine(a_Format, a_ArgList)) - { - m_BeginLineUpdate = false; - puts(""); - } + m_Log->Log(a_Format, a_ArgList, a_ShouldReplaceLine); ResetColor(); #endif } else { SetColor(csRegular); - m_Log->Log(a_Format, a_ArgList); + m_Log->Log(a_Format, a_ArgList, a_ShouldReplaceLine); ResetColor(); puts(""); } |