美文网首页
Dragon Engine:Debug

Dragon Engine:Debug

作者: Dragon_boy | 来源:发表于2020-06-30 23:09 被阅读0次

本文同时发布在我的个人博客上:https://dragon_boy.gitee.io

Debug,或者说日志系统,这对于调试来说非常重要。

这里我们使用开源库spdlog,github地址:https://github.com/gabime/spdlog

在Log类中,我们将核心端和客户端的日志分开。

Log.h

#pragma once

#include "Core.h"
#include "spdlog/spdlog.h"
#include "spdlog/fmt/ostr.h"

namespace Dragon
{
    class Log
    {
    public:
        static void Init();

        inline static std::shared_ptr<spdlog::logger>& GetCoreLogger() { return s_CoreLogger; }
        inline static std::shared_ptr<spdlog::logger>& GetClientLogger() { return s_ClientLogger; }
    private:
        static std::shared_ptr<spdlog::logger> s_CoreLogger;
        static std::shared_ptr<spdlog::logger> s_ClientLogger;
    };
}

// Core log maros
#define DG_CORE_TRACE(...)      ::Dragon::Log::GetCoreLogger()->trace(__VA_ARGS__)
#define DG_CORE_INFO(...)       ::Dragon::Log::GetCoreLogger()->info(__VA_ARGS__)
#define DG_CORE_WARN(...)       ::Dragon::Log::GetCoreLogger()->warn(__VA_ARGS__)
#define DG_CORE_ERROR(...)      ::Dragon::Log::GetCoreLogger()->error(__VA_ARGS__)
#define DG_CORE_CRITICAL(...)       ::Dragon::Log::GetCoreLogger()->critical(__VA_ARGS__)

//Client log macros
#define DG_TRACE(...)           ::Dragon::Log::GetClientLogger()->trace(__VA_ARGS__)
#define DG_INFO(...)            ::Dragon::Log::GetClientLogger()->info(__VA_ARGS__)
#define DG_WARN(...)            ::Dragon::Log::GetClientLogger()->warn(__VA_ARGS__)
#define DG_ERROR(...)           ::Dragon::Log::GetClientLogger()->error(__VA_ARGS__)
#define DG_CRITICAL(...)            ::Dragon::Log::GetClientLogger()->critical(__VA_ARGS__)

我们定义的都是静态方法,不需要创建对象实例。同时,为了方便调用方法,我们定义了几个宏定义。Trace显示白字,Info显示绿字,Warn显示黄字,Error显示红字,Critical显示红底白字。...__VA_ARGS__代表使用可变参数。

Log.cpp

#include "dgpch.h"
#include "Log.h"
#include "spdlog/sinks/stdout_color_sinks.h"

namespace Dragon
{
    std::shared_ptr<spdlog::logger> Log::s_CoreLogger;
    std::shared_ptr<spdlog::logger> Log::s_ClientLogger;

    void Log::Init()
    {
        spdlog::set_pattern("%^[%T] %n: %v%$");
        s_CoreLogger = spdlog::stdout_color_mt("Dragon");
        s_CoreLogger->set_level(spdlog::level::trace);

        s_ClientLogger = spdlog::stdout_color_mt("APP");
        s_ClientLogger->set_level(spdlog::level::trace);
    }
}

Init()方法中,我们初始化每次默认会打印的字符,"%^[%T] %n: %v%$"对应[时:分:秒]

我们在EntryPoint.h中设置一些初始化日志输出:

#pragma once

#ifdef DG_PLATFORM_WINDOWS

extern Dragon::Application* Dragon::CreateApplication();

int main(int argc, char** argv)
{
    Dragon::Log::Init();
    DG_CORE_WARN("Initialized Log!");
    DG_INFO("Hello!");
    
    auto app = Dragon::CreateApplication();
    app->Run();
    delete app;
    return 0;
}

#endif

运行效果:


之后我们可以使用日志系统来帮助我们Debug。

项目github地址:https://github.com/Dragon-Baby/Dragon

相关文章

  • Dragon Engine:Debug

    本文同时发布在我的个人博客上:https://dragon_boy.gitee.io Debug,或者说日志系统,...

  • Dragon Engine:窗口

    本节介绍窗口的实现。这里使用开源库GLFW,之前也介绍过,只不过这里的主要任务就是将GLFW的API抽象出来,方便...

  • Dragon Engine:GUI

    这一节介绍GUI的实现。我们这里使用开源库ImGui。 首先我们将GUI分离为一个单独的层,创建ImGuiLaye...

  • Dragon Engine:层

    本文同时发布在我的个人博客上:https://dragon_boy.gitee.io/ 层的概念在许多软件中都存在...

  • Dragon Engine:事件系统

    本文同时发布在我的个人博客上:https://dragon_boy.gitee.io 事件系统的范围很广,这里我暂...

  • Dragon Engine:编译项目

    编写大项目的时候,大部分文件可以复用,但构建项目的软件,使用的平台,可使用的外部资源因各种各不相同,所以大部分时候...

  • Dragon Engine:材质系统

    这一节介绍材质系统,主要是进行着色器类的抽象: 这里设计了两个类,一个着色器类,一个着色器库类。着色器类的成员函数...

  • Dragon Engine:纹理模块

    这一节介绍纹理模块的实现。首先是纹理类的抽象: 纹理基类的构造不用多说,这里衍生出了两个纹理类,2D和立方体贴图。...

  • Dragon Engine:帧缓冲

    之前相关的图形学文章介绍过,帧缓冲非常有用,可以用来实现Post-Processing效果,以及阴影效果等,在进行...

  • Dragon Engine:基础渲染架构

    本节的目的是在已有的基础上构建出一个基础渲染架构。主要任务就是抽象。 一个简单的渲染架构包含很多模块,我之前发了许...

网友评论

      本文标题:Dragon Engine:Debug

      本文链接:https://www.haomeiwen.com/subject/uyofqktx.html