xuqiang 5 kuukautta sitten
vanhempi
sitoutus
d07b1fa9f2
3 muutettua tiedostoa jossa 82 lisäystä ja 2 poistoa
  1. 31 0
      include/logger.h
  2. 48 0
      src/logger.cpp
  3. 3 2
      src/main.cpp

+ 31 - 0
include/logger.h

@@ -0,0 +1,31 @@
+#ifndef __LOGGER_H__
+#define __LOGGER_H__
+
+#include <spdlog/spdlog.h>
+
+// #define LOG_TRACE(...)    spdlog::default_logger()->trace(__VA_ARGS__)
+// #define LOG_DEBUG(...)    spdlog::default_logger()->debug(__VA_ARGS__)
+// #define LOG_INFO(...)     spdlog::default_logger()->info(__VA_ARGS__)
+// #define LOG_WARN(...)     spdlog::default_logger()->warn(__VA_ARGS__)
+// #define LOG_ERROR(...)    spdlog::default_logger()->error(__VA_ARGS__)
+// #define LOG_CRITICAL(...) spdlog::default_logger()->critical(__VA_ARGS__)
+
+#define LOG_TRACE(...)      SPDLOG_LOGGER_CALL(spdlog::default_logger().get(), spdlog::level::trace, __VA_ARGS__)
+#define LOG_DEBUG(...)      SPDLOG_LOGGER_CALL(spdlog::default_logger().get(), spdlog::level::debug, __VA_ARGS__)
+#define LOG_INFO(...)       SPDLOG_LOGGER_CALL(spdlog::default_logger().get(), spdlog::level::info, __VA_ARGS__)
+#define LOG_ERROR(...)      SPDLOG_LOGGER_CALL(spdlog::default_logger().get(), spdlog::level::err, __VA_ARGS__)
+#define LOG_WARN(...)       SPDLOG_LOGGER_CALL(spdlog::default_logger().get(), spdlog::level::warn, __VA_ARGS__)
+#define LOG_CRITICAL(...)   SPDLOG_LOGGER_CALL(spdlog::default_logger().get(), spdlog::level::critical, __VA_ARGS__)
+
+
+class Logger
+{
+
+public:
+    Logger();
+    ~Logger();
+
+    static void setup();
+};
+
+#endif // LOGGER_H

+ 48 - 0
src/logger.cpp

@@ -0,0 +1,48 @@
+#include "logger.h"
+#include <spdlog/async.h>
+#include <spdlog/sinks/rotating_file_sink.h>
+#include "spdlog/sinks/stdout_color_sinks.h"
+
+#define MAX_ROTATING_FILE_SIZE  1048576 * 5
+#define MAX_ROTATING_FILES      3
+    
+Logger::Logger()
+{
+
+}
+
+Logger::~Logger()
+{
+
+}
+
+void Logger::setup()
+{
+#if 0
+    auto rotating_logger = spdlog::rotating_logger_mt<spdlog::async_factory>("file", "logs/log.txt", MAX_ROTATING_FILE_SIZE, MAX_ROTATING_FILES);
+    auto console_logger = spdlog::stdout_color_mt<spdlog::async_factory>("out");    
+    auto err_logger = spdlog::stderr_color_mt<spdlog::async_factory>("err");
+#endif
+
+    spdlog::init_thread_pool(8192, 1);
+
+    auto rotating_sink = std::make_shared<spdlog::sinks::rotating_file_sink_mt>("logs/log.txt", MAX_ROTATING_FILE_SIZE, MAX_ROTATING_FILES);
+    auto console_sink = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
+    // auto err_sink = std::make_shared<spdlog::sinks::stderr_color_sink_mt>();
+
+    rotating_sink->set_level(spdlog::level::trace);
+    console_sink->set_level(spdlog::level::debug);
+    // console_sink配置错误接收器只接收错误级别以上的日志
+    // err_sink->set_level(spdlog::level::err);
+
+    // auto logger = std::make_shared<spdlog::logger>("multi_sink", spdlog::sinks_init_list{rotating_sink, console_sink, err_sink});
+
+    // asynchronous logger with multi sinks
+    std::vector<spdlog::sink_ptr> sinks {rotating_sink, console_sink};
+    auto logger = std::make_shared<spdlog::async_logger>("multi_sink", sinks.begin(), sinks.end(), spdlog::thread_pool(), spdlog::async_overflow_policy::block);
+    
+    logger->set_pattern("[%Y-%m-%d %H:%M:%S.%e] Thread ID: %t (%s:%#) [%^%l%$] %v");
+    logger->set_level(spdlog::level::trace); // 允许所有日志通过 logger 层
+    spdlog::register_logger(logger);
+    spdlog::set_default_logger(logger);
+}

+ 3 - 2
src/main.cpp

@@ -1,5 +1,6 @@
 #include <QApplication>
 #include "mainwindow.h"
+#include "logger.h"
 
 #define SCREEN_WIDTH    1280
 #define SCREEN_HEIGHT   720
@@ -10,9 +11,9 @@ int main(int argc, char *argv[])
     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
 #endif
     QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
-
     QApplication app(argc, argv);
-
+    Logger::setup();
+    
     MainWindow w;
     w.resize(SCREEN_WIDTH, SCREEN_HEIGHT);
     w.showFullScreen();