Bladeren bron

V0.9.20
1、修改了spdlog日志库的初始化方式

Apple 2 weken geleden
bovenliggende
commit
7167e04737
3 gewijzigde bestanden met toevoegingen van 110 en 53 verwijderingen
  1. 44 20
      Libraries/LHQLog/inc/LHLog_file_sink.h
  2. 58 33
      common/LHLog/LHLogInit.cpp
  3. 8 0
      common/LHLog/LHLogInit.h

+ 44 - 20
Libraries/LHQLog/inc/LHLog_file_sink.h

@@ -79,28 +79,51 @@ protected:
         const string_view_t str = string_view_t(formatted.data(), formatted.size());
         // qDebug() << "Aftter string_view_t formatted.size() = " << formatted.size();
         /* 根据等级输出 */
-        if(msgLevel == level::trace) {
-            /* 这个等级不输出,理论上也不会有这个等级的日志到这一步,在外面就拦截了 */
+        // if(msgLevel == level::trace) {
+        //     /* 这个等级不输出,理论上也不会有这个等级的日志到这一步,在外面就拦截了 */
             
-        }
-        else if (msgLevel == level::debug) {
-            m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Debug, str.data());
-        }
-        else if (msgLevel == level::info) {
-            m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Common, str.data());
-        }
-        else if(msgLevel == level::warn) {
-            m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Error, str.data());
-        }
-        else if (msgLevel == level::err) {
-            m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Error, str.data());
-        }
-        else if(msgLevel == level::critical) {
-            /* 因该不会用到这个等级,不输出 */
+        // }
+        // else if (msgLevel == level::debug) {
+        //     m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Debug, str.data());
+        // }
+        // else if (msgLevel == level::info) {
+        //     m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Common, str.data());
+        // }
+        // else if(msgLevel == level::warn) {
+        //     m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Error, str.data());
+        // }
+        // else if (msgLevel == level::err) {
+        //     m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Error, str.data());
+        // }
+        // else if(msgLevel == level::critical) {
+        //     /* 因该不会用到这个等级,不输出 */
             
-        }else if (msgLevel == level::off) {
-            /* 不输出 */
+        // }else if (msgLevel == level::off) {
+        //     /* 不输出 */
         
+        // }
+        switch ((int)msgLevel) 
+        {
+            case level::trace:
+                break; // 不输出trace级别的日志
+            case level::debug:
+                m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Debug, str.data());
+                break;
+            case level::info:
+                m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Common, str.data());
+                break;
+            case level::warn:
+                m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Error, str.data());
+                break;
+            case level::err:
+                m_lhLog->DoWriteLogEx(m_strLogName, ELT_Log_Error, str.data());
+                break;
+            case level::critical:
+                // 可能不会用到这个等级,不输出
+                break;
+            case level::off:
+                // 不输出
+                break;
         }
 
         // QString strLog = QString::fromLocal8Bit(str.data(), str.size());
@@ -112,8 +135,9 @@ protected:
 
 private:
     CLHQLogApi* m_lhLog = nullptr;
-    QString m_strLogName;
     QString m_libName;
+    QString m_strLogName;
+    
 };
 
 using LHLog_file_sink_mt = LHLog_file_sink<std::mutex>;

+ 58 - 33
common/LHLog/LHLogInit.cpp

@@ -6,7 +6,8 @@
 
 
 #include <string>
-#include <QApplication>
+// #include <filesystem>
+#include <QCoreApplication>
 
 
 /* 初始化spdlog,输入的是模组名称,可以为空
@@ -18,63 +19,66 @@
 void initLog(QString ModuleName, CLHQLogApi& lhQLog)
 {
 
-    try 
-    {
+    try {
+        /* 创建一个控制台sink */
+        auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
         /* 创建一个文件sink,每天一个,00:00创建新的 */
         // auto sink_file = std::make_shared<spdlog::sinks::daily_file_sink_mt>("FlowChartLog/log.txt",0,0);
         /* 自定义的sink */
         // std::filesystem::path execPath = std::filesystem::current_path();
-        std::string execPath = QApplication::applicationDirPath().toStdString();
+        QString execPath = QCoreApplication::applicationDirPath();
     #if defined(Q_OS_WIN32)
         #if C_DEBUG
-            std::string libName = execPath + "/LHQLogd.dll";
+            QString libName = execPath + "/LHQLogd.dll";
         #elif C_RELEASE
-            std::string libName = execPath + "/LHQLog.dll";
+            QString libName = execPath + "/LHQLog.dll";
         #endif
     #elif defined(Q_OS_LINUX)
-        std::string libName = execPath + "/libLHQLog.so";
+        QString libName = execPath + "/libLHQLog.so";
     #endif
-        
+        /* 写入文件的sink */
+        auto sink_custom = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&lhQLog, libName, ModuleName);
         /* 给默认记录器用的sink */
         auto sink_default = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
-        /* 创建一个控制台sink */
-        auto sink_consolse = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
-        /* 创建写入文件的sink */
-        auto sink_LHLog = std::make_shared<spdlog::sinks::LHLog_file_sink_mt>(&lhQLog, QString(libName.c_str()), ModuleName);
- 
+
         /* 修改输出格式 */
-        #if C_DEBUG
-            sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v %$");
-            // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S:%e] [%^%n%$] [%^%l%$] %s %#: %v");
-            sink_LHLog->set_pattern("%v");
-            sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e:%e] [%l] [%s %#] %v %$");
-        #elif C_RELEASE
-            sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v %$");
-            // sink_file->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n]: %v %$");
-            sink_LHLog->set_pattern("%v");
-            sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] %v %$");
-        #endif
+#if  defined (C_DEBUG)
+        sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] [%s %#] %v%$");
+        // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S] [%^%n%$] [%^%l%$] %s %#: %v");
+        sink_custom->set_pattern("%v");
+        sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%s %#] %v%$");
+#elif defined(C_RELEASE)
+        sink_consolse->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] [%n] %v%$");
+        // sink_file->set_pattern("[%Y-%m-%d %H:%M:%S] [%^%n%$] [%^%l%$] %s %#: %v");
+        sink_custom->set_pattern("%v");
+        sink_default->set_pattern("%^[%Y-%m-%d %H:%M:%S:%e] [%l] %v%$");
+#endif
 
         /* 日志输出方向,终端和文件 */
         std::vector<spdlog::sink_ptr> sinks;
         sinks.push_back(sink_consolse);
         // sinks.push_back(sink_file);
-        sinks.push_back(sink_LHLog);
+        sinks.push_back(sink_custom);
 
         /* 设置默认日志记录器,设置成自定义的sink */
         spdlog::default_logger()->sinks().clear();
         spdlog::default_logger()->sinks().push_back(sink_default);
-        spdlog::default_logger()->sinks().push_back(sink_LHLog);
-
+        spdlog::default_logger()->sinks().push_back(sink_custom);
+        // auto vecSinks =  spdlog::default_logger()->sinks();
+        // for(auto& sink : vecSinks)
+        // {
+        //     SPDLOG_INFO("sink name = {}", typeid(*sink).name());
+        // }
         /* 创建一个标准输出 */
         auto logger_main = std::make_shared<spdlog::logger>("main",begin(sinks),end(sinks));
-        /* 创建一个WebAPI logger */
-        auto logger_WebAPI = std::make_shared<spdlog::logger>("WebAPI",begin(sinks),end(sinks));
+        /* 创建一个 FromWebAPI logger */
+        auto logger_webapi = std::make_shared<spdlog::logger>("FromWebAPI",begin(sinks),end(sinks));
 
 
         /* 注册到注册表 */
         spdlog::register_logger(logger_main);
-        spdlog::register_logger(logger_WebAPI);
+        spdlog::register_logger(logger_webapi);
+
 
         /* 设置spdlog输出级别,默认的估计不输出debug这个级别
          * 这是默认的设置,可以在外面单数设置输出方式
@@ -86,8 +90,8 @@ void initLog(QString ModuleName, CLHQLogApi& lhQLog)
 #elif defined(C_RELEASE)
         spdlog::set_level(spdlog::level::info);             /* 只输出info以上的输出 */
         spdlog::flush_on(spdlog::level::info);              /* 设置刷新等级 */
-        sink_consolse->set_level(spdlog::level::info);       /* 控制台不输出 */
-        sink_default->set_level(spdlog::level::info);        /* 默认sink也不输出 */
+        // sink_consolse->set_level(spdlog::level::off);       /* 控制台不输出 */
+        // sink_default->set_level(spdlog::level::off);        /* 默认sink也不输出 */
 #endif
 
 //    SPDLOG_LOGGER_DEBUG(logger_main,"******* 有行号且debug也能输出 *******");
@@ -95,4 +99,25 @@ void initLog(QString ModuleName, CLHQLogApi& lhQLog)
     catch (const spdlog::spdlog_ex& ex) {
         qDebug() << "Log initialization failed: " << ex.what() ;
     }
-}
+}
+
+
+/* 修改日志输出等级,输入1表示 */
+void changeLogLevel(ELogLevel level)
+{
+    if(ELogLevel::Log_Debug == level)
+    {
+        spdlog::set_level(spdlog::level::debug);
+        spdlog::flush_on(spdlog::level::debug);
+    }
+    else if(ELogLevel::Log_Info == level)
+    {
+        spdlog::set_level(spdlog::level::info);
+        spdlog::flush_on(spdlog::level::info);
+        /* 获取写入文件的sink,release模式下不写入文件 */
+        auto logger = spdlog::get("main");
+        auto sinks = logger->sinks();
+        sinks[1]->set_level(spdlog::level::info);
+    }
+}
+

+ 8 - 0
common/LHLog/LHLogInit.h

@@ -4,8 +4,16 @@
 class QString;
 class CLHQLogApi;
 
+enum class ELogLevel
+{
+    Log_Info = 0,
+    Log_Debug = 1
+};
+
 void initLog(QString ModuleName, CLHQLogApi& lhQLog);
 
+/* 修改日志输出等级,输入1表示 */
+void changeLogLevel(ELogLevel level);
 
 
 #endif /* LHLOGINIT_H */