mirror of
https://github.com/Mauler125/r5sdk.git
synced 2025-09-16 15:02:35 +02:00
Ansi terminal color support + big optimizations on all log systems + 'Warning()' hook
* Ansi colors can now be enabled with the '-ansiclr- flag. * All loggers have been optimized and are all initialized only once at process startup. * New hook for 'Warning()' print function with warning level.
This commit is contained in:
13
r5dev/core/assert.h
Normal file
13
r5dev/core/assert.h
Normal file
@@ -0,0 +1,13 @@
|
||||
#pragma once
|
||||
#ifndef NDEBUG
|
||||
# define Assert(condition, message) \
|
||||
do { \
|
||||
if (! (condition)) { \
|
||||
std::cerr << "Assertion `" #condition "` failed in " << __FILE__ \
|
||||
<< " line " << __LINE__ << ": " << message << std::endl; \
|
||||
std::terminate(); \
|
||||
} \
|
||||
} while (false)
|
||||
#else
|
||||
# define Assert(condition, message) do { } while (false)
|
||||
#endif
|
@@ -1,6 +1,7 @@
|
||||
#include "core/stdafx.h"
|
||||
#include "core/r5dev.h"
|
||||
#include "core/init.h"
|
||||
#include "core/logdef.h"
|
||||
/*****************************************************************************/
|
||||
#ifndef DEDICATED
|
||||
#include "windows/id3dx.h"
|
||||
@@ -15,7 +16,13 @@
|
||||
|
||||
void R5Dev_Init()
|
||||
{
|
||||
#ifndef DEDICATED
|
||||
if (strstr(GetCommandLineA(), "-wconsole")) { Console_Init(); }
|
||||
#else
|
||||
Console_Init();
|
||||
#endif // !DEDICATED
|
||||
|
||||
SpdLog_Init();
|
||||
Systems_Init();
|
||||
WinSys_Attach();
|
||||
|
||||
@@ -24,13 +31,17 @@ void R5Dev_Init()
|
||||
DirectX_Init();
|
||||
#endif // !DEDICATED
|
||||
|
||||
spdlog::get("console")->set_pattern("%v");
|
||||
spdlog::info("\n");
|
||||
spdlog::info("+-----------------------------------------------------------------------------+\n");
|
||||
spdlog::info("| R5 DEVELOPER CONSOLE -- INITIALIZED ----------------------------------- |\n");
|
||||
spdlog::info("+-----------------------------------------------------------------------------+\n");
|
||||
spdlog::get("console")->set_pattern("[%S.%e] %v");
|
||||
spdlog::info("\n");
|
||||
}
|
||||
|
||||
//#############################################################################
|
||||
// SHUTDOWN
|
||||
//#############################################################################
|
||||
|
||||
void R5Dev_Shutdown()
|
||||
{
|
||||
Systems_Shutdown();
|
||||
|
60
r5dev/core/logdef.cpp
Normal file
60
r5dev/core/logdef.cpp
Normal file
@@ -0,0 +1,60 @@
|
||||
#include "core/stdafx.h"
|
||||
#include "core/logdef.h"
|
||||
|
||||
//#############################################################################
|
||||
// SPDLOG SETUP
|
||||
//#############################################################################
|
||||
void SpdLog_Init(void)
|
||||
{
|
||||
static bool bInitialized = false;
|
||||
|
||||
if (bInitialized)
|
||||
{
|
||||
Assert(bInitialized, "'SpdLog_Init()' has already been called.");
|
||||
return;
|
||||
}
|
||||
|
||||
/************************
|
||||
* IMGUI LOGGER SETUP *
|
||||
************************/
|
||||
{
|
||||
auto iconsole = std::make_shared<spdlog::logger>("game_console", g_spd_sys_p_ostream_sink);
|
||||
spdlog::register_logger(iconsole); // in-game console logger.
|
||||
iconsole->set_pattern("[%S.%e] %v");
|
||||
iconsole->set_level(spdlog::level::trace);
|
||||
}
|
||||
|
||||
/************************
|
||||
* WINDOWS LOGGER SETUP *
|
||||
************************/
|
||||
{
|
||||
auto wconsole = spdlog::stdout_logger_mt("win_console");
|
||||
|
||||
// Determine if user wants ansi-color logging in the terminal.
|
||||
if (strstr(GetCommandLineA(), "-ansiclr"))
|
||||
{
|
||||
wconsole->set_pattern("[%S.%e] %v\u001b[0m");
|
||||
g_bSpdLog_UseAnsiClr = true;
|
||||
}
|
||||
else { wconsole->set_pattern("[%S.%e] %v"); }
|
||||
wconsole->set_level(spdlog::level::trace);
|
||||
spdlog::set_default_logger(wconsole); // Set as default.
|
||||
}
|
||||
|
||||
/************************
|
||||
* ROTATE LOGGER SETUP *
|
||||
************************/
|
||||
{
|
||||
spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_warn_logger", "platform\\logs\\sqvm_warn.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
|
||||
spdlog::rotating_logger_mt<spdlog::synchronous_factory>("sqvm_print_logger", "platform\\logs\\sqvm_print.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
|
||||
spdlog::rotating_logger_mt<spdlog::synchronous_factory>("dev_message_logger", "platform\\logs\\dev_message.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
|
||||
spdlog::rotating_logger_mt<spdlog::synchronous_factory>("netchan_pack_logger", "platform\\logs\\net_trace.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
|
||||
spdlog::rotating_logger_mt<spdlog::synchronous_factory>("qhull_debug_logger", "platform\\logs\\qhull_print.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
|
||||
spdlog::rotating_logger_mt<spdlog::synchronous_factory>("filesystem_warn_logger", "platform\\logs\\fs_warn.log", SPDLOG_MAX_SIZE, SPDLOG_NUM_FILE)->set_pattern("[%Y-%m-%d %H:%M:%S.%e] %v");
|
||||
}
|
||||
|
||||
spdlog::set_level(spdlog::level::trace);
|
||||
spdlog::flush_every(std::chrono::seconds(5)); // Flush buffers every 5 seconds for every logger.
|
||||
|
||||
bInitialized = true;
|
||||
}
|
@@ -1,27 +1,13 @@
|
||||
#pragma once
|
||||
|
||||
constexpr int SPDLOG_MAX_SIZE = 10 * 1024; // Sets number of bytes before rotating logger.
|
||||
constexpr int SPDLOG_NUM_FILE = 0; // Sets number of files to rotate to.
|
||||
|
||||
inline bool g_bSpdLog_UseAnsiClr = false;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// NETCHAN |
|
||||
inline auto g_spd_netchan_logger = spdlog::basic_logger_mt("netchan_logger", "platform\\logs\\net_trace.log");
|
||||
inline std::ostringstream g_spd_net_p_oss;
|
||||
inline auto g_spd_net_p_ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(g_spd_net_p_oss);
|
||||
//-------------------------------------------------------------------------
|
||||
// FILESYSTEM |
|
||||
inline std::ostringstream fs_oss;
|
||||
inline auto fs_ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(fs_oss);
|
||||
//-------------------------------------------------------------------------
|
||||
// SQUIRREL PRINTF |
|
||||
inline std::ostringstream g_spd_sqvm_p_oss;
|
||||
inline auto g_spd_sqvm_p_ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(g_spd_sqvm_p_oss);
|
||||
//-------------------------------------------------------------------------
|
||||
// SQUIRREL WARNF |
|
||||
inline std::ostringstream g_spd_sqvm_w_oss;
|
||||
inline auto g_spd_sqvm_w_ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(g_spd_sqvm_w_oss);
|
||||
//-------------------------------------------------------------------------
|
||||
// SYSTEM PRINTF |
|
||||
// IMGUI CONSOLE SINK |
|
||||
inline std::ostringstream g_spd_sys_w_oss;
|
||||
inline auto g_spd_sys_p_ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(g_spd_sys_w_oss);
|
||||
//-------------------------------------------------------------------------
|
||||
// QHULL PRINTF |
|
||||
inline std::ostringstream g_spd_qhull_p_w_oss;
|
||||
inline auto g_spd_qhull_p_ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_st>(g_spd_qhull_p_w_oss);
|
||||
|
||||
void SpdLog_Init(void);
|
||||
|
Reference in New Issue
Block a user