feat: spdlog 显式初始化——控制台彩色 + 文件双 sink

Application 构造时 Logger::Initialize(APP logger:stderr 彩色 +
HelloVulkan.log 双写,warn 以上立即 flush),析构 Shutdown。
This commit is contained in:
2026-09-24 13:23:52 +08:00
parent a1c6ad20be
commit 705250df76
3 changed files with 58 additions and 0 deletions
+6
View File
@@ -11,6 +11,12 @@
namespace Engine {
namespace Logger
{
void Initialize();
void Shutdown();
}
#define ENGINE_TRACE(...) ::spdlog::trace(__VA_ARGS__)
#define ENGINE_INFO(...) ::spdlog::info(__VA_ARGS__)
#define ENGINE_DEBUG(...) ::spdlog::debug(__VA_ARGS__)
+4
View File
@@ -22,6 +22,8 @@ namespace Engine {
Application::Application(const std::string& title, u32 width, u32 height)
{
Logger::Initialize();
m_Window = CreateScope<Window>(title, width, height);
// 事件通道:GLFW 回调 → 本类 DispatchEvent → 派生类钩子
@@ -51,6 +53,8 @@ namespace Engine {
if (m_Renderer) {
m_Renderer->GetDevice().GetDevice().waitIdle();
}
Logger::Shutdown();
}
void Application::EnableImGui()
+48
View File
@@ -1,3 +1,51 @@
//
// Created by atdunbg on 2026/9/20.
//
#include <Engine/Core/Log.h>
#include "spdlog/sinks/basic_file_sink.h"
#include "spdlog/sinks/stdout_color_sinks.h"
namespace Engine::Logger
{
static bool IsInited = false;
void Initialize()
{
if (IsInited)
{
throw std::runtime_error("spdlog already inited");
}
IsInited = true;
// 控制台彩色 sink (多线程安全)
auto console = std::make_shared<spdlog::sinks::stderr_color_sink_mt>();
console->set_pattern("%^[%T.%e] [%l] [%n] %v%$");
// 文件
auto file = std::make_shared<spdlog::sinks::basic_file_sink_mt>("HelloVulkan.log", true);
file->set_pattern("[%Y-%m-%d %T.%e] [%l] [%t] %v");
// 多sink 组合默认 logger
// auto logger = std::make_shared<spdlog::logger>("hello", spdlog::sinks_init_list{console, file});
auto logger = std::make_shared<spdlog::logger>("APP", spdlog::sinks_init_list{console, file});
logger->set_level(spdlog::level::trace);
logger->flush_on(spdlog::level::warn); // warn 及以上立即 flush,避免崩溃丢日志
spdlog::set_default_logger(logger);
}
void Shutdown()
{
if (!IsInited)
{
throw std::runtime_error("spdlog already shutdown or not init");
}
IsInited = false;
spdlog::shutdown();
}
}