Logger: also output to a file in debug mode.

CLion can't grab stdout on Wine/Proton, so this is the only way to get any
kind of output there.
This commit is contained in:
Guillaume Jacquemin 2023-08-28 15:46:13 +02:00
parent 81430de345
commit 3fc9243c81
Signed by: williamjcm
SSH key fingerprint: SHA256:AYLOg+iTV0ElElnlu4vqM4edFazVdRiuQB0Y5LoKc4A
2 changed files with 11 additions and 23 deletions

View file

@ -16,7 +16,10 @@
#include <iostream> #include <iostream>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/Pair.h>
#include <Corrade/Utility/Debug.h> #include <Corrade/Utility/Debug.h>
#include <Corrade/Utility/Path.h>
#include "Logger.h" #include "Logger.h"
@ -33,12 +36,13 @@ Logger::instance() {
void void
Logger::initialise() { Logger::initialise() {
auto exe_path = Utility::Path::split(*Utility::Path::executableLocation()).first();
_logFile.open(Utility::Path::join(exe_path, "SaveToolLog.txt").cbegin(), std::ios::trunc);
#ifndef SAVETOOL_DEBUG_BUILD #ifndef SAVETOOL_DEBUG_BUILD
_logFile.open("SaveToolLog.txt", std::ios::trunc);
_logFile << "In case you encounter a bug:\n" << _logFile << "In case you encounter a bug:\n" <<
"1. Do not run the Save Tool again, as this log will be cleared.\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" << "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" "3. Mention me (@williamjcm) 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" << " 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" << "4. Send me this file _when I ask for it_, preferably in DMs.\n" <<
std::endl; std::endl;
@ -59,31 +63,19 @@ Logger::unindent() {
void void
Logger::log(EntryType type, StringView location, StringView message) { Logger::log(EntryType type, StringView location, StringView message) {
Debug d{ Debug d{&_logFile};
#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) { switch(type) {
case EntryType::Info: case EntryType::Info:
d << COLOURED_TEXT(Default, "[ INFO]"_s); d << "[ INFO]"_s;
break; break;
case EntryType::Warning: case EntryType::Warning:
d << COLOURED_TEXT(Yellow, "[WARNING]"_s); d << "[WARNING]"_s;
break; break;
case EntryType::Error: case EntryType::Error:
d << COLOURED_TEXT(Red, "[ ERROR]"_s); d << "[ ERROR]"_s;
break; break;
} }
#undef COLOURED_TEXT
d << "["_s << Debug::nospace << location << Debug::nospace << "]"; d << "["_s << Debug::nospace << location << Debug::nospace << "]";

View file

@ -18,10 +18,8 @@
#include <ctime> #include <ctime>
#include <mutex>
#ifndef SAVETOOL_DEBUG_BUILD
#include <fstream> #include <fstream>
#endif #include <mutex>
#include <Corrade/Containers/String.h> #include <Corrade/Containers/String.h>
#include <Corrade/Containers/ArrayView.h> #include <Corrade/Containers/ArrayView.h>
@ -60,9 +58,7 @@ class Logger {
private: private:
Logger() = default; Logger() = default;
#ifndef SAVETOOL_DEBUG_BUILD
std::ofstream _logFile; std::ofstream _logFile;
#endif
std::uint32_t _indentLevel = 0; std::uint32_t _indentLevel = 0;