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
4244void 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