From 68148a475e1550d6deb7659bf588a2bdc99aa27a Mon Sep 17 00:00:00 2001 From: ouczbs Date: Mon, 26 Feb 2024 08:48:10 +0800 Subject: [PATCH] update log --- engine/3rdparty/zlog/include/zlog.h | 80 ++++++++++++++++--- engine/3rdparty/zlog/src/zlog.cpp | 61 +++++++------- engine/3rdparty/zlog/xmake.lua | 1 + engine/src/engine/vulkanapi/vulkan.h | 18 +---- .../src/engine/vulkanapi/wrapper/instance.cpp | 2 +- .../engine/vulkanapi/wrapper/instance_help.h | 36 ++++----- 6 files changed, 118 insertions(+), 80 deletions(-) diff --git a/engine/3rdparty/zlog/include/zlog.h b/engine/3rdparty/zlog/include/zlog.h index c285455..6e926e4 100644 --- a/engine/3rdparty/zlog/include/zlog.h +++ b/engine/3rdparty/zlog/include/zlog.h @@ -1,12 +1,72 @@ #pragma once -#include -#include -namespace zlog -{ - static std::mutex _mutex; - static void Message(std::string info, bool logCondition); - static void Message(std::string info); - static void Exception(std::string info, bool logCondition); - static void Exception(std::string info); -} +#include "spdlog/spdlog.h" + +#include +#include + +class zlog final +{ +public: + enum class LogLevel : uint8_t + { + debug, + info, + warn, + error, + fatal + }; + +public: + zlog(); + ~zlog(); + + template + void log(LogLevel level, TARGS&&... args) + { + switch (level) + { + case LogLevel::debug: + m_logger->debug(std::forward(args)...); + break; + case LogLevel::info: + m_logger->info(std::forward(args)...); + break; + case LogLevel::warn: + m_logger->warn(std::forward(args)...); + break; + case LogLevel::error: + m_logger->error(std::forward(args)...); + break; + case LogLevel::fatal: + m_logger->critical(std::forward(args)...); + fatalCallback(std::forward(args)...); + break; + default: + break; + } + } + + template + void fatalCallback(TARGS&&... args) + { + const std::string format_str = fmt::format(std::forward(args)...); + throw std::runtime_error(format_str); + } + +private: + std::shared_ptr m_logger; +}; +extern zlog gLog; +#define LOG_HELPER(LOG_LEVEL, ...) \ + gLog.log(LOG_LEVEL, "[" + std::string(__FUNCTION__) + "] " + __VA_ARGS__); + +#define LOG_DEBUG(...) LOG_HELPER(zlog::LogLevel::debug, __VA_ARGS__); + +#define LOG_INFO(...) LOG_HELPER(zlog::LogLevel::info, __VA_ARGS__); + +#define LOG_WARN(...) LOG_HELPER(zlog::LogLevel::warn, __VA_ARGS__); + +#define LOG_ERROR(...) LOG_HELPER(zlog::LogLevel::error, __VA_ARGS__); + +#define LOG_FATAL(...) LOG_HELPER(zlog::LogLevel::fatal, __VA_ARGS__); \ No newline at end of file diff --git a/engine/3rdparty/zlog/src/zlog.cpp b/engine/3rdparty/zlog/src/zlog.cpp index 7e5a776..cabf788 100644 --- a/engine/3rdparty/zlog/src/zlog.cpp +++ b/engine/3rdparty/zlog/src/zlog.cpp @@ -1,38 +1,31 @@ -#include "zlog. - - - - -#include - -std::mutex zlog::_mutex = std::mutex(); - -void zlog::Message(std::string info, bool logCondition) +#include "zlog.h" +#include +#include +#include +#include +zlog gLog; +zlog::zlog() { - if (logCondition) - { - std::unique_lock lock(_mutex); - std::cout << "Message: " + info << std::endl; - } + auto console_sink = std::make_shared(); + console_sink->set_level(spdlog::level::trace); + console_sink->set_pattern("[%Y-%m-%d %H:%M:%S] %l %^%v%$"); + + const spdlog::sinks_init_list sink_list = {console_sink}; + + spdlog::init_thread_pool(8192, 1); + + m_logger = std::make_shared("muggle_logger", + sink_list.begin(), + sink_list.end(), + spdlog::thread_pool(), + spdlog::async_overflow_policy::block); + m_logger->set_level(spdlog::level::trace); + + spdlog::register_logger(m_logger); } -void zlog::Message(std::string info) +zlog::~zlog() { - std::unique_lock lock(_mutex); - std::cout << "Message: " + info << std::endl; -} - -void zlog::Exception(std::string info, bool logCondition) -{ - if (logCondition) - { - std::unique_lock lock(_mutex); - std::cout << "Exception: " + info << std::endl; - } -} - -void zlog::Exception(std::string info) -{ - std::unique_lock lock(_mutex); - std::cout << "Exception: " + info << std::endl; -} + m_logger->flush(); + spdlog::drop_all(); +} \ No newline at end of file diff --git a/engine/3rdparty/zlog/xmake.lua b/engine/3rdparty/zlog/xmake.lua index 06593db..d116715 100644 --- a/engine/3rdparty/zlog/xmake.lua +++ b/engine/3rdparty/zlog/xmake.lua @@ -2,5 +2,6 @@ set_languages("cxx20") target("zlog") set_kind("static") add_includedirs("include", {public = true}) + add_packages("spdlog") add_files("src/*.cpp") add_headerfiles("include/*.h") \ No newline at end of file diff --git a/engine/src/engine/vulkanapi/vulkan.h b/engine/src/engine/vulkanapi/vulkan.h index d1b0550..86d16ad 100644 --- a/engine/src/engine/vulkanapi/vulkan.h +++ b/engine/src/engine/vulkanapi/vulkan.h @@ -12,23 +12,9 @@ namespace vulkanapi { #define _USE_GRAPHIC_DEBUG -#define assert_return(cond, info, result)\ - if (cond) {\ - zlog::Exception(info);\ - return result;\ - } -#define assert(cond,info)\ - if (cond) {\ - zlog::Exception(info);\ - } -#define assert_vulkan_return(VkResult, info, result) \ +#define LOG_VULKAN(VkResult, info) \ if (VkResult != VK_SUCCESS) { \ - zlog::Exception(info);\ - return result;\ - } -#define assert_vulkan(VkResult, info) \ - if (VkResult != VK_SUCCESS) { \ - zlog::Exception(info);\ + LOG_ERROR(info)\ } using voidFn = std::function; diff --git a/engine/src/engine/vulkanapi/wrapper/instance.cpp b/engine/src/engine/vulkanapi/wrapper/instance.cpp index 9128fb3..fe5ca44 100644 --- a/engine/src/engine/vulkanapi/wrapper/instance.cpp +++ b/engine/src/engine/vulkanapi/wrapper/instance.cpp @@ -56,7 +56,7 @@ namespace vulkanapi { static_cast(extensions.size()), // uint32_t enabledExtensionCount extensions.data() // const char * const * ppEnabledExtensionNames }; - zlog::Exception("Failed to create instance.", vkCreateInstance(&instance_create_info, nullptr, &mPtr)); + LOG_VULKAN(vkCreateInstance(&instance_create_info, nullptr, &mPtr), "Failed to create instance."); //调用vulkan接口,加载实例函数指针 LoadInstanceLevelFunctions(mPtr, extensions); diff --git a/engine/src/engine/vulkanapi/wrapper/instance_help.h b/engine/src/engine/vulkanapi/wrapper/instance_help.h index 1b85f88..1a6e4e1 100644 --- a/engine/src/engine/vulkanapi/wrapper/instance_help.h +++ b/engine/src/engine/vulkanapi/wrapper/instance_help.h @@ -12,7 +12,7 @@ namespace vulkanapi { vulkan_library = dlopen("libvulkan.so.1", RTLD_NOW); #endif if (vulkan_library == nullptr) { - zlog::Exception("Could not connect with a Vulkan Runtime library."); + LOG_INFO("Could not connect with a Vulkan Runtime library."); return false; } return true; @@ -27,7 +27,7 @@ namespace vulkanapi { #define EXPORTED_VULKAN_FUNCTION( name ) \ name = (PFN_##name)LoadFunction( vulkan_library, #name ); \ if( name == nullptr ) { \ - zlog::Exception( "Could not load exported Vulkan function named:"#name);\ + LOG_ERROR( "Could not load exported Vulkan function named:"#name);\ return false; \ } #include "engine/vulkanapi/vulkan_function_list.inl" @@ -38,7 +38,7 @@ namespace vulkanapi { #define GLOBAL_LEVEL_VULKAN_FUNCTION( name ) \ name = (PFN_##name)vkGetInstanceProcAddr( nullptr, #name ); \ if( name == nullptr ) { \ - zlog::Exception( "Could not load global level Vulkan function named:"#name);\ + LOG_ERROR( "Could not load global level Vulkan function named:"#name);\ return false; \ } @@ -52,7 +52,7 @@ namespace vulkanapi { #define INSTANCE_LEVEL_VULKAN_FUNCTION( name ) \ name = (PFN_##name)vkGetInstanceProcAddr( instance, #name ); \ if( name == nullptr ) { \ - zlog::Exception( "Could not load instance-level Vulkan function named:"#name);\ + LOG_ERROR( "Could not load instance-level Vulkan function named:"#name);\ return false; \ } @@ -62,7 +62,7 @@ namespace vulkanapi { if( std::string( enabled_extension ) == std::string( extension ) ) { \ name = (PFN_##name)vkGetInstanceProcAddr( instance, #name ); \ if( name == nullptr ) { \ - zlog::Exception( "Could not load instance-level Vulkan function named:"#name);\ + LOG_ERROR( "Could not load instance-level Vulkan function named:"#name);\ return false; \ } \ } \ @@ -97,7 +97,7 @@ namespace vulkanapi { result = vkEnumerateInstanceLayerProperties(&extensions_count, nullptr); if ((result != VK_SUCCESS) || (extensions_count == 0)) { - zlog::Exception("Could not get the number of instance layers."); + LOG_ERROR("Could not get the number of instance layers."); return false; } @@ -105,7 +105,7 @@ namespace vulkanapi { result = vkEnumerateInstanceLayerProperties(&extensions_count, available_layers.data()); if ((result != VK_SUCCESS) || (extensions_count == 0)) { - zlog::Exception("Could not enumerate instance layers."); + LOG_ERROR("Could not enumerate instance layers."); return false; } @@ -118,7 +118,7 @@ namespace vulkanapi { result = vkEnumerateInstanceExtensionProperties(nullptr, &extensions_count, nullptr); if ((result != VK_SUCCESS) || (extensions_count == 0)) { - zlog::Exception("Could not get the number of instance extensions."); + LOG_ERROR("Could not get the number of instance extensions."); return false; } @@ -126,42 +126,40 @@ namespace vulkanapi { result = vkEnumerateInstanceExtensionProperties(nullptr, &extensions_count, available_extensions.data()); if ((result != VK_SUCCESS) || (extensions_count == 0)) { - zlog::Exception("Could not enumerate instance extensions."); + LOG_ERROR("Could not enumerate instance extensions."); return false; } return true; } - std::vector _EnabledExtensionNames(std::vector& extensions) { + std::vector _EnabledExtensionNames(std::vector& extensions) { std::vector available_extensions; std::vector _extension; if (!CheckAvailableInstanceExtensions(available_extensions)) { return _extension; } for (int i = 0, l = extensions.size(); i < l; i++) { - if (IsExtensionSupported(available_extensions, extensions[i])) { - _extension.push_back(extensions[i]); + if (IsExtensionSupported(available_extensions, extensions[i].c_str())) { + _extension.push_back(extensions[i].c_str()); } else { - zlog::Exception("cann't support extension: "); - std::cout << "cann't support extension: " << extensions[i] << std::endl; + LOG_ERROR("cann't support extension: {}", extensions[i].c_str()); } } return _extension; } - std::vector _EnabledLayerNames(std::vector& layers) { + std::vector _EnabledLayerNames(std::vector& layers) { std::vector available_layers; std::vector _layers; if (!CheckAvailableInstanceLayers(available_layers)) { return _layers; } for (int i = 0, l = layers.size(); i < l; i++) { - if (IsLayerSupported(available_layers, layers[i])) { - _layers.push_back(layers[i]); + if (IsLayerSupported(available_layers, layers[i].c_str())) { + _layers.push_back(layers[i].c_str()); } else { - zlog::Exception("Could not load instance-level Vulkan function named:"#name); \ - std::cout << "cann't support layer: " << layers[i] << std::endl; + LOG_ERROR("Could not load instance-level Vulkan function named: {}", layers[i].c_str()); } } return _layers;