diff --git a/include/Cubed/tools/cubed_assert.hpp b/include/Cubed/tools/cubed_assert.hpp index 98a0af8..c3185db 100644 --- a/include/Cubed/tools/cubed_assert.hpp +++ b/include/Cubed/tools/cubed_assert.hpp @@ -6,10 +6,10 @@ namespace Assert { std::string_view message = "" ) { - LOG::error("Assertion failed: {} at {}: {} in function {}", + Logger::error("Assertion failed: {} at {}: {} in function {}", condition, file, line, func); if (message.size()) { - LOG::error("Message: {}", message); + Logger::error("Message: {}", message); } std::abort(); diff --git a/include/Cubed/tools/log.hpp b/include/Cubed/tools/log.hpp index 10eafad..8530654 100644 --- a/include/Cubed/tools/log.hpp +++ b/include/Cubed/tools/log.hpp @@ -2,16 +2,25 @@ #include #include #include +#include #include -namespace LOG { +namespace Logger { + enum class Level { + TRACE, + DEBUG, + INFO, + ERROR, + WARN + }; + template - void info(const char * fmt, Args&&... args) { + inline void info(std::format_string fmt, Args&&... args) { auto now_time = std::chrono:: time_point_cast (std::chrono::system_clock::now()); - std::string msg = std::vformat(fmt, std::make_format_args(args...)); + std::string msg = std::vformat(fmt.get(), std::make_format_args(args...)); std::cout << "\033[1;32m" << std::format("[INFO][{:%Y-%m-%d %H:%M:%S}]", now_time) << msg @@ -20,11 +29,11 @@ namespace LOG { } template - void error(const char * fmt, Args&&... args) { + inline void error(std::format_string fmt, Args&&... args) { auto now_time = std::chrono:: time_point_cast (std::chrono::system_clock::now()); - std::string msg = std::vformat(fmt, std::make_format_args(args...)); + std::string msg = std::vformat(fmt.get(), std::make_format_args(args...)); std::cerr << "\033[1;31m" << std::format("[ERROR][{:%Y-%m-%d %H:%M:%S}]", now_time) << msg @@ -34,11 +43,11 @@ namespace LOG { } template - void warn(const char * fmt, Args&&... args) { + inline void warn(std::format_string fmt, Args&&... args) { auto now_time = std::chrono:: time_point_cast (std::chrono::system_clock::now()); - std::string msg = std::vformat(fmt, std::make_format_args(args...)); + std::string msg = std::vformat(fmt.get(), std::make_format_args(args...)); std::cout << "\033[1;33m" << std::format("[WARN][{:%Y-%m-%d %H:%M:%S}]", now_time) << msg @@ -46,4 +55,41 @@ namespace LOG { << std::endl; } + template + inline void log(Level level, std::source_location loc, std::format_string fmt, Args&&... args) { + auto now_time = std::chrono:: + time_point_cast + (std::chrono::system_clock::now()); + std::string msg = std::vformat(fmt.get(), std::make_format_args(args...)); + switch (level) { + case Logger::Level::TRACE: + std::cout << "\033[1;34m" + << std::format("[TRACE][{:%Y-%m-%d %H:%M:%S}]", now_time) + << "[" << loc.file_name() << ":" << loc.line() << "]" + << "[" << loc.function_name() << "]" + << msg + << "\033[0m" + << "\n"; + break; + case Logger::Level::DEBUG: + std::cout << "\033[1;34m" + << std::format("[DEBUG][{:%Y-%m-%d %H:%M:%S}]", now_time) + << msg + << "\033[0m" + << "\n"; + break; + case Logger::Level::INFO: + info(fmt, std::forward(args)...); + break; + case Logger::Level::WARN: + warn(fmt, std::forward(args)...); + break; + case Logger::Level::ERROR: + error(fmt, std::forward(args)...); + break; + + } + + } + } diff --git a/src/app.cpp b/src/app.cpp index 6b6a527..2f35334 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -156,10 +156,10 @@ int App::start_cubed_application(int argc, char** argv) { return 0; } catch (std::exception& e) { - LOG::error("{}", e.what()); + Logger::error("{}", e.what()); } catch (...) { - LOG::error("Unkown error"); + Logger::error("Unkown error"); } return 1; diff --git a/src/gameplay/world.cpp b/src/gameplay/world.cpp index 1d6d744..fe5585a 100644 --- a/src/gameplay/world.cpp +++ b/src/gameplay/world.cpp @@ -38,7 +38,7 @@ const BlockRenderData& World::get_block_render_data(int world_x, int world_y ,in if (world_z >= 0) { chunk_z = world_z / CHUCK_SIZE; } - //LOG::info("Chunk PosX : {} Chuch PosZ : {}", chunk_x, chunk_z); + //Logger::info("Chunk PosX : {} Chuch PosZ : {}", chunk_x, chunk_z); auto it = m_chunks.find(ChunkPos{chunk_x, chunk_z}); CUBED_ASSERT_MSG(it != m_chunks.end(), "Chunk not find"); @@ -76,7 +76,7 @@ const std::optional& World::get_look_block_pos(const std::string& nam static std::optional null_look_block = std::nullopt; auto it = m_players.find(HASH::str(name)); if (it == m_players.end()) { - LOG::error("Can't find player {}", name); + Logger::error("Can't find player {}", name); CUBED_ASSERT(0); return null_look_block; } @@ -88,7 +88,7 @@ const std::optional& World::get_look_block_pos(const std::string& nam Player& World::get_player(const std::string& name){ auto it = m_players.find(HASH::str(name)); if (it == m_players.end()) { - LOG::error("Can't find player {}", name); + Logger::error("Can't find player {}", name); CUBED_ASSERT(0); } @@ -107,7 +107,7 @@ void World::init_world() { m_chunks.emplace(pos, Chunk(*this, pos)); } } - LOG::info("World init finfish"); + Logger::info("World init finfish"); for (auto& chunk_map : m_chunks) { auto& [chunk_pos, chunk] = chunk_map; diff --git a/src/renderer.cpp b/src/renderer.cpp index 4eb592f..ec7926a 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -35,11 +35,11 @@ Renderer::~Renderer() { void Renderer::init() { if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { - LOG::error("Failed to initialize glad"); + Logger::error("Failed to initialize glad"); exit(EXIT_FAILURE); } - LOG::info("OpenGL Version: {}.{}", GLVersion.major, GLVersion.minor); - LOG::info("Renderer: {}", reinterpret_cast(glGetString(GL_RENDERER))); + Logger::info("OpenGL Version: {}.{}", GLVersion.major, GLVersion.minor); + Logger::info("Renderer: {}", reinterpret_cast(glGetString(GL_RENDERER))); Shader world_shader{"world", "shaders/block_v_shader.glsl", "shaders/block_f_shader.glsl"}; Shader outline_shader{"outline", "shaders/outline_v_shader.glsl", "shaders/outline_f_shader.glsl"}; @@ -62,7 +62,7 @@ void Renderer::init() { #ifndef NDEBUG glEnable(GL_DEBUG_OUTPUT); glDebugMessageCallback([](GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void* user_param) { - LOG::info("GL Debug: {}", reinterpret_cast(message)); + Logger::log(Logger::Level::DEBUG, std::source_location::current(),"GL Debug: {}", reinterpret_cast(message)); }, nullptr); #endif diff --git a/src/shader.cpp b/src/shader.cpp index 5aae52e..ef0d685 100644 --- a/src/shader.cpp +++ b/src/shader.cpp @@ -40,7 +40,7 @@ Shader& Shader::operator=(Shader&& shader) { void Shader::create(const std::string& name, const std::string& v_shader_path, const std::string& f_shader_path) { if (!m_program) { - LOG::warn("Shader has already created !"); + Logger::warn("Shader has already created !"); return; } m_program = Tools::create_shader_program(v_shader_path, f_shader_path); @@ -50,7 +50,7 @@ void Shader::create(const std::string& name, const std::string& v_shader_path, c std::size_t Shader::hash() const { if (!m_hash) { - LOG::warn("Shader has already created !"); + Logger::warn("Shader has already created !"); return 0; } return m_hash; @@ -60,7 +60,7 @@ GLuint Shader::loc(const std::string& loc) const { CUBED_ASSERT_MSG(m_program != 0, "Shader program not created"); GLint pos = glGetUniformLocation(m_program, loc.c_str()); if (pos == -1) { - LOG::info("Shader name {}, loc name {}, pos {}", m_name, loc, pos); + Logger::info("Shader name {}, loc name {}, pos {}", m_name, loc, pos); CUBED_ASSERT_MSG(pos == -1, "Can't find UniformLocation"); } return static_cast(pos); @@ -68,7 +68,7 @@ GLuint Shader::loc(const std::string& loc) const { const std::string& Shader::name() const { if (m_name == "-1") { - LOG::warn("Shader has already created !"); + Logger::warn("Shader has already created !"); } return m_name; diff --git a/src/texture_manager.cpp b/src/texture_manager.cpp index 31ec4d2..4276dfb 100644 --- a/src/texture_manager.cpp +++ b/src/texture_manager.cpp @@ -14,7 +14,7 @@ TextureManager::~TextureManager() { void TextureManager::delet_texture() { glDeleteTextures(1, &m_texture_array); glDeleteTextures(1, &m_block_status_array); - LOG::info("Successfully delete all texture"); + Logger::info("Successfully delete all texture"); } GLuint TextureManager::get_block_status_array() const{ @@ -125,7 +125,7 @@ void TextureManager::init_texture() { GLfloat max_aniso = 0.0f; glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, &max_aniso); if (max_aniso > 0.0f) { - LOG::info("Support anisotropic filtering max_aniso is {}", max_aniso); + Logger::info("Support anisotropic filtering max_aniso is {}", max_aniso); glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, max_aniso); } @@ -154,7 +154,7 @@ void TextureManager::init_texture() { Tools::check_opengl_error(); if (max_aniso > 0.0f) { - LOG::info("Support anisotropic filtering max_aniso is {}", max_aniso); + Logger::info("Support anisotropic filtering max_aniso is {}", max_aniso); glTexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, max_aniso); } diff --git a/src/tools/font.cpp b/src/tools/font.cpp index 582381e..300b8b0 100644 --- a/src/tools/font.cpp +++ b/src/tools/font.cpp @@ -9,10 +9,10 @@ Font::Font() { if (FT_Init_FreeType(&m_ft)) { - LOG::error("FREETYPE: Could not init FreeType Library"); + Logger::error("FREETYPE: Could not init FreeType Library"); } if (FT_New_Face(m_ft, "assets/fonts/IBMPlexSans-Regular.ttf", 0, &m_face)) { - LOG::error("FREETYPE: Failed to load font"); + Logger::error("FREETYPE: Failed to load font"); } FT_Set_Pixel_Sizes(m_face, 0, 48); @@ -30,7 +30,7 @@ Font::~Font() { void Font::load_character(char8_t c) { if (FT_Load_Char(m_face, c, FT_LOAD_RENDER)) { - LOG::error("FREETYTPE: Failed to load Glyph"); + Logger::error("FREETYTPE: Failed to load Glyph"); return; } const auto& width = m_face->glyph->bitmap.width; @@ -102,7 +102,7 @@ void Font::render_text(const Shader& shader, const std::string& text, float x, f for (char8_t c : text) { auto it = font.m_characters.find(c); if (it == font.m_characters.end()) { - LOG::error("Can't find character {}", static_cast(c)); + Logger::error("Can't find character {}", static_cast(c)); continue; } Character& ch = it->second; diff --git a/src/tools/log.cpp b/src/tools/log.cpp index 32e654d..41f3af0 100644 --- a/src/tools/log.cpp +++ b/src/tools/log.cpp @@ -1,6 +1,6 @@ #include -namespace LOG { +namespace Logger { } \ No newline at end of file diff --git a/src/tools/shader_tools.cpp b/src/tools/shader_tools.cpp index e89f22d..5f7f4de 100644 --- a/src/tools/shader_tools.cpp +++ b/src/tools/shader_tools.cpp @@ -24,7 +24,7 @@ namespace Tools { Tools::check_opengl_error(); glGetShaderiv(v_shader, GL_COMPILE_STATUS, &vc); if (vc != 1) { - LOG::error("vertex compilation failed"); + Logger::error("vertex compilation failed"); Tools::print_shader_log(v_shader); CUBED_ASSERT(0); } @@ -32,7 +32,7 @@ namespace Tools { Tools::check_opengl_error(); glGetShaderiv(f_shader, GL_COMPILE_STATUS, &fc); if (fc != 1) { - LOG::error("vertex compilation failed"); + Logger::error("vertex compilation failed"); Tools::print_shader_log(f_shader); CUBED_ASSERT(0); } @@ -45,7 +45,7 @@ namespace Tools { Tools::check_opengl_error(); glGetProgramiv(vf_program, GL_LINK_STATUS, &linked); if (linked != 1) { - LOG::error("linking failed"); + Logger::error("linking failed"); Tools::print_program_info(vf_program); CUBED_ASSERT(0); } @@ -63,7 +63,7 @@ namespace Tools { if (len > 0) { log = (char*)malloc(len); glGetShaderInfoLog(shader, len, &ch_written, log); - LOG::info("Shader Info Log: {}", log); + Logger::info("Shader Info Log: {}", log); free(log); } @@ -78,7 +78,7 @@ namespace Tools { if (len > 0) { log = (char*)malloc(len); glGetProgramInfoLog(prog, len, &ch_written, log); - LOG::info("Program Info Log: {}", log); + Logger::info("Program Info Log: {}", log); free(log); } } @@ -87,7 +87,7 @@ namespace Tools { bool found_error = false; int gl_err = glGetError(); while (gl_err != GL_NO_ERROR) { - LOG::error("glEorr: {}", gl_err); + Logger::error("glEorr: {}", gl_err); found_error = true; gl_err = glGetError(); } @@ -101,7 +101,7 @@ namespace Tools { std::ifstream file_stream(file_path, std::ios::in); if (!file_stream.is_open()) { - LOG::error("{} not exist", file_path); + Logger::error("{} not exist", file_path); } std::string line = ""; diff --git a/src/window.cpp b/src/window.cpp index 7c684f0..f0ad70c 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -33,7 +33,7 @@ void Window::update_viewport() { void Window::init() { if (!glfwInit()) { - LOG::error("glfwinit fail"); + Logger::error("glfwinit fail"); exit(EXIT_FAILURE); } @@ -50,7 +50,7 @@ void Window::init() { if (glfwRawMouseMotionSupported()) { glfwSetInputMode(m_window, GLFW_RAW_MOUSE_MOTION, GLFW_TRUE); } else { - LOG::warn("Don,t support Raw Mouse Motion"); + Logger::warn("Don,t support Raw Mouse Motion"); } GLFWmonitor* primary = glfwGetPrimaryMonitor();