Jelajahi Sumber

修改代码进行日志兼容

lwk 6 jam lalu
induk
melakukan
99572f7e71

+ 1 - 0
Detector/CCOS.Dev.FPD.Demo/CCOS.Dev.FPD.Demo.cpp

@@ -474,6 +474,7 @@ std::string nsFPD::FPDDemoDriver::DeviceProbe()
 }
 
 nsFPD::FPDDemoDevice::FPDDemoDevice(std::shared_ptr<IOEventCenter> center, string ConfigPath)
+	: FPDDeviceMould("DemoFPD")
 {
 	m_strWorkPath = GetProcessDirectory();
 

+ 0 - 3
Detector/CCOS.Dev.FPD.Demo/CCOS.Dev.FPD.Demo.h

@@ -188,9 +188,6 @@ namespace CCOS::Dev::Detail::Detector
 		RET_STATUS SetDemoImage(string& strPath1, string& strPath2, string& strPath3);
 		RET_STATUS ResetError();
 		RET_STATUS ActiveSyncMode(int nSyncMode);
-		std::string getLogHostName() const override {
-			return "DemoFPD"; // ×ÓÀàµÄ¾ßÌåÖµ
-		}
 
 		void SendInfoLog(string strLogKey, float fValue);
 		void SendInfoLog(string strLogKey, int nValue);

+ 19 - 0
Detector/CCOS.Dev.FPD.Demo/LogLocalHelper.cpp

@@ -0,0 +1,19 @@
+// LogLocalHelper.cpp
+#include "LogLocalHelper.h"
+#include <string>
+#include <iostream>
+
+// 使用线程局部存储:确保每个动态库有独立的模块名副本
+static std::string s_localModuleName;
+
+// 初始化当前动态库的局部模块名(在调用initLogModule后立即调用)
+void FPDDemoSetLocalModuleName(const std::string& moduleName) {
+    std::cout << "GEN setLocalModuleName" << moduleName << std::endl;
+    s_localModuleName = moduleName;
+}
+
+// 获取当前动态库的局部模块名(日志输出时调用)
+const std::string& FPDDemoGetLocalModuleName() {
+    std::cout << "GEN getLocalModuleName" << s_localModuleName << std::endl;
+    return s_localModuleName;
+}

+ 28 - 0
Detector/CCOS.Dev.FPD.Demo/LogLocalHelper.h

@@ -0,0 +1,28 @@
+// LogLocalHelper.h
+#ifndef LOG_LOCAL_HELPER_H
+#define LOG_LOCAL_HELPER_H
+#include <string>
+#include "Log4CPP.h"
+
+void FPDDemoSetLocalModuleName(const std::string& moduleName);
+const std::string& FPDDemoGetLocalModuleName();
+
+// 重定义日志宏:使用当前动态库的局部模块名getLocalModuleName()
+#define LOG(level, format, ...) \
+    do { \
+        const std::string& localModule = FPDDemoGetLocalModuleName(); \
+        LogInstance* logger = LogManager::getInstance().getInstance(localModule); \
+        if (logger && logger->isInitialized()) { \
+            logger->log(log4cpp::Priority::level, __FILE__, __LINE__, __FUNCTION__, format, ##__VA_ARGS__); \
+        } else { \
+            std::cerr << "[" << localModule << "] Logger not initialized or module not found!" << std::endl; \
+        } \
+    } while(0)
+
+// 保留原有的级别宏(无需修改,依赖重定义后的LOG)
+#define FDEBUG(format, ...) LOG(DEBUG, format, ##__VA_ARGS__)
+#define FINFO(format, ...)  LOG(INFO,  format, ##__VA_ARGS__)
+#define FWARN(format, ...)  LOG(WARN,  format, ##__VA_ARGS__)
+#define FERROR(format, ...) LOG(ERROR, format, ##__VA_ARGS__)
+
+#endif // LOG_LOCAL_HELPER_H

+ 22 - 1
Detector/CCOS.Dev.FPDDeviceMould/CCOS.Dev.FPDDeviceMould.cpp

@@ -28,7 +28,7 @@ FPDDeviceMould::FPDDeviceMould()
 	m_strIODevicePath = "/Detector";
 
 	string strLogPath = GetProcessDirectory() + R"(/Conf/log_config.xml)";
-	logHostName = getLogHostName();
+	logHostName = "FPDDeviceMould";
 	// 初始化日志系统
 	bool ret = initLogModule(
 		logHostName,       // 主机名(用于日志路径中的{host}占位符)
@@ -45,6 +45,27 @@ FPDDeviceMould::FPDDeviceMould()
 	FINFO("Code Build datetime [{$} {$}]", __DATE__, __TIME__);
 }
 
+FPDDeviceMould::FPDDeviceMould(const std::string& logHostName)
+{
+	m_strIODevicePath = "/Detector";
+
+	string strLogPath = GetProcessDirectory() + R"(/Conf/log_config.xml)";
+	// 初始化日志系统
+	bool ret = initLogModule(
+		logHostName,       // 主机名(用于日志路径中的{host}占位符)
+		"FPD.Modle",        // 唯一模块名
+		strLogPath,  // 配置文件路径
+		true           // 是否输出到控制台(可选)
+	);
+	if (!ret) {
+		std::cerr << "Log init failed!" << std::endl;
+		return;
+	}
+	FPDSetLocalModuleName("FPD.Modle");
+	//
+	FINFO("Code Build datetime [{$} {$}]", __DATE__, __TIME__);
+}
+
 FPDDeviceMould::~FPDDeviceMould()
 {
 

+ 1 - 4
Detector/CCOS.Dev.FPDDeviceMould/CCOS.Dev.FPDDeviceMould.hpp

@@ -687,12 +687,9 @@ namespace CCOS::Dev::Detail::Detector
 	{
 	public:
 		FPDDeviceMould();
+		FPDDeviceMould(const std::string& logHostName);
 		~FPDDeviceMould();
 		string logHostName;
-		//protected:
-		virtual std::string getLogHostName() const {
-			return "FPDDeviceMould"; // ĬÈÏÖµ
-		}
 		//	virtual void RegisterCtrl();
 		//	virtual void RegisterAcq();
 		//	virtual void RegisterSync();

+ 19 - 0
Detector/CCOS.Dev.FPDDeviceMould/LogLocalHelper.cpp

@@ -0,0 +1,19 @@
+// LogLocalHelper.cpp
+#include "LogLocalHelper.h"
+#include <string>
+#include <iostream>
+
+// 使用线程局部存储:确保每个动态库有独立的模块名副本
+static std::string s_localModuleName;
+
+// 初始化当前动态库的局部模块名(在调用initLogModule后立即调用)
+void FPDSetLocalModuleName(const std::string& moduleName) {
+    std::cout << "GEN setLocalModuleName" << moduleName << std::endl;
+    s_localModuleName = moduleName;
+}
+
+// 获取当前动态库的局部模块名(日志输出时调用)
+const std::string& FPDGetLocalModuleName() {
+    std::cout << "GEN getLocalModuleName" << s_localModuleName << std::endl;
+    return s_localModuleName;
+}

+ 28 - 0
Detector/CCOS.Dev.FPDDeviceMould/LogLocalHelper.h

@@ -0,0 +1,28 @@
+// LogLocalHelper.h
+#ifndef LOG_LOCAL_HELPER_H
+#define LOG_LOCAL_HELPER_H
+#include <string>
+#include "Log4CPP.h"
+
+void FPDSetLocalModuleName(const std::string& moduleName);
+const std::string& FPDGetLocalModuleName();
+
+// 重定义日志宏:使用当前动态库的局部模块名getLocalModuleName()
+#define LOG(level, format, ...) \
+    do { \
+        const std::string& localModule = FPDGetLocalModuleName(); \
+        LogInstance* logger = LogManager::getInstance().getInstance(localModule); \
+        if (logger && logger->isInitialized()) { \
+            logger->log(log4cpp::Priority::level, __FILE__, __LINE__, __FUNCTION__, format, ##__VA_ARGS__); \
+        } else { \
+            std::cerr << "[" << localModule << "] Logger not initialized or module not found!" << std::endl; \
+        } \
+    } while(0)
+
+// 保留原有的级别宏(无需修改,依赖重定义后的LOG)
+#define FDEBUG(format, ...) LOG(DEBUG, format, ##__VA_ARGS__)
+#define FINFO(format, ...)  LOG(INFO,  format, ##__VA_ARGS__)
+#define FWARN(format, ...)  LOG(WARN,  format, ##__VA_ARGS__)
+#define FERROR(format, ...) LOG(ERROR, format, ##__VA_ARGS__)
+
+#endif // LOG_LOCAL_HELPER_H