// MassBuilderSaveTool // Copyright (C) 2021-2022 Guillaume Jacquemin // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include #include #include "Logger.h" using Containers::Array; using Utility::Debug; using Utility::Warning; using Utility::Error; using namespace Magnum; Logger& Logger::instance() { static Logger logger; return logger; } void Logger::initialise() { #ifndef SAVETOOL_DEBUG_BUILD _logFile.open("SaveToolLog.txt", std::ios::trunc); _logFile << "In case you encounter a bug:\n" << "1. Do not run the Save Tool again, as this log will be cleared.\n" << "2. Go to either the official Sekai Project Discord guild, or the community M.A.S.S. Builder one.\n" << "3. Mention me (William JCM#2301) to get my attention, with a description of the bug.\n" " Please include as many details as possible, I don't want to play \"20 questions\", and neither do you.\n" << "4. Send me this file _when I ask for it_, preferably in DMs.\n" << std::endl; #endif } void Logger::indent() { _indentLevel++; } void Logger::unindent() { if(_indentLevel > 0) { _indentLevel--; } } void Logger::log(EntryType type, StringView location, StringView message) { Debug d{ #ifndef SAVETOOL_DEBUG_BUILD &_logFile #else &std::cout #endif }; #ifdef SAVETOOL_DEBUG_BUILD #define COLOURED_TEXT(colour, text) Debug::color(Debug::Color::colour) << (text) << Debug::resetColor #else #define COLOURED_TEXT(colour, text) (text) #endif switch(type) { case EntryType::Info: d << COLOURED_TEXT(Default, "[ INFO]"_s); break; case EntryType::Warning: d << COLOURED_TEXT(Yellow, "[WARNING]"_s); break; case EntryType::Error: d << COLOURED_TEXT(Red, "[ ERROR]"_s); break; } #undef COLOURED_TEXT d << "["_s << Debug::nospace << location << Debug::nospace << "]"; for(UnsignedInt i = 0; i < _indentLevel; i++) { d << Debug::nospace << " "_s << Debug::nospace; } d << ((message.back() == '\n') ? message.exceptSuffix(1) : message); } void Logger::lockMutex() { _logMutex.lock(); } void Logger::unlockMutex() { _logMutex.unlock(); } Logger& logger() { return Logger::instance(); }