Skip to content

Commit abb1bfc

Browse files
Logging fixes
Properly disable logs on Release build, fixed early logs not being flushed to the file
1 parent b9da570 commit abb1bfc

File tree

1 file changed

+18
-12
lines changed

1 file changed

+18
-12
lines changed

src/logging.cpp

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <spdlog/spdlog.h>
22
#include <spdlog/sinks/basic_file_sink.h>
33
#include <spdlog/sinks/ringbuffer_sink.h>
4+
#include <spdlog/sinks/stdout_sinks.h>
45
#include <spdlog/cfg/helpers.h>
56

67
#include "logging.h"
@@ -14,22 +15,23 @@ void logging::SetupLogger() {
1415
/* Set log level */
1516
TCHAR envLogLevel[32767];
1617
GetEnvironmentVariable("SAFEDISCSHIM_LOGLEVEL", envLogLevel, sizeof(envLogLevel));
17-
if ( GetLastError() == ERROR_ENVVAR_NOT_FOUND ) {
18+
if (GetLastError() == ERROR_ENVVAR_NOT_FOUND) {
1819
#ifdef _DEBUG
1920
spdlog::set_level(spdlog::level::trace);
2021
#else
2122
// don't output logs if envvar is not defined
22-
return;
23+
spdlog::set_level(spdlog::level::off);
2324
#endif
2425
}
2526
else spdlog::cfg::helpers::load_levels(envLogLevel);
2627

2728
/* Return early if logs are off, so files are not created */
28-
if ( spdlog::get_level() == spdlog::level::off )
29+
if (spdlog::get_level() == spdlog::level::off)
2930
return;
3031

3132
/* Log to ringbuffer until we can determine log file name later */
3233
auto logger = std::make_shared<spdlog::logger>("ringbuffer", ringbufferSink);
34+
spdlog::initialize_logger(logger);
3335
spdlog::set_default_logger(logger);
3436

3537
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");
@@ -40,25 +42,29 @@ void logging::SetupLogger() {
4042
}
4143

4244
void logging::SetLoggerFileName(const std::string& fileName) {
45+
/* Return early if logs are off, so files are not created */
46+
if (spdlog::get_level() == spdlog::level::off)
47+
return;
48+
4349
try {
4450
const auto logger = spdlog::basic_logger_mt("file",
4551
fileName, true);
4652
spdlog::set_default_logger(logger);
4753
}
48-
catch (const spdlog::spdlog_ex &ex) {
54+
catch (const spdlog::spdlog_ex& ex) {
4955
spdlog::info("Error logging to file ({}), logging to stdout instead.",
5056
ex.what());
57+
const auto logger = spdlog::stdout_logger_mt("stdout");
58+
spdlog::set_default_logger(logger);
5159
}
5260

53-
// temporarily remove formatting since ringbuffer logs are already formatted
54-
spdlog::set_pattern("%v");
55-
56-
std::vector<std::string> logMessages = ringbufferSink->last_formatted();
61+
std::vector<spdlog::details::log_msg_buffer> logMessages = ringbufferSink->last_raw();
5762

5863
// output all logs in buffer to file
59-
for (const auto& message : logMessages) {
60-
spdlog::info(message);
64+
for (const auto sink : spdlog::default_logger()->sinks()) {
65+
for (const auto& message : logMessages) {
66+
sink->log(message);
67+
}
68+
sink->flush();
6169
}
62-
// restore formatting
63-
spdlog::set_pattern("[%Y-%m-%d %H:%M:%S.%e] [%l] %v");
6470
}

0 commit comments

Comments
 (0)