Browse Source

#IQRV #comment 解决科堡调用我行日志库出的问题

gifur 4 years ago
parent
commit
6ef4e6d20e
2 changed files with 43 additions and 3 deletions
  1. 24 3
      DevAdapter/include/log4vendor.h
  2. 19 0
      DevAdapter/self/liblog4vendor/log4vendor.cpp

+ 24 - 3
DevAdapter/include/log4vendor.h

@@ -8,7 +8,7 @@
  * @brief Log class for VTM device vendor for developing device adapter
  * @details 
  *	2020-4-28: strip log component from SpAgent Project and adjust it.
- *  
+ *  2020-11-11: add log_init_config_c structure and new init api: log4vendor::initp
  **************************************/
 
 #ifndef _VTM_LOG4VENDOR_H_
@@ -18,6 +18,7 @@
 
 #include <sstream>
 #include <string>
+#include <cstring>
 
 #ifdef _WIN32
 #ifdef LIBLOG4VENDOR_EXPORTS
@@ -134,22 +135,40 @@ typedef char CHAR;
 #define TRACE4VTM_FUNCTION(pValue) cmb::log4vendor_tracer _FunctionTraceLogger(\
 	__FUNCTION__, cmb::log4vendor_tracer::_get_file_name(__FILE__), __LINE__, (pValue))
 
+#define VENDOR_BUFF_SIZE 256
 
 namespace cmb {
 
+	struct log_init_config_c
+	{
+        short log_type;       /*见上面 CMB_LOG_TYPE_FILE 等定义*/
+        short log_level;      /*见上面 CMB_LOG_TRACE 等定义*/
+        char dev_name[VENDOR_BUFF_SIZE];  /*硬件名称,用于作为子目录的区分*/
+		char log_dir[VENDOR_BUFF_SIZE];  /*在 log_type 包含 CMB_LOG_TYPE_FILE 时,该参数才有效,用于记录日志的目录*/
+	};
+
 	struct LOG4VENDOR_API log_init_config
 	{
 		short log_type;       /*见上面 CMB_LOG_TYPE_FILE 等定义*/
 		short log_level;      /*见上面 CMB_LOG_TRACE 等定义*/
-		vtm_string dev_name;  /*硬件名称,用于作为子目录的区分*/
-		vtm_string  log_dir;  /*在 log_type 包含 CMB_LOG_TYPE_FILE 时,该参数才有效,用于记录日志的目录*/
+		std::string dev_name;  /*硬件名称,用于作为子目录的区分*/
+		std::string log_dir;  /*在 log_type 包含 CMB_LOG_TYPE_FILE 时,该参数才有效,用于记录日志的目录*/
 
 		log_init_config()
 			:log_type(CMB_LOG_TYPE_FILE)
 			,log_level(CMB_LOG_TRACE)
 			,dev_name(LOG4VTM_TEXT("VTM")),log_dir(LOG4VTM_TEXT("")){}
+
+		log_init_config(const log_init_config& rhs)
+			:log_type(rhs.log_type)
+            , log_level(rhs.log_level)
+            , dev_name(rhs.dev_name), log_dir(rhs.log_dir)
+        {
+        }
 	};
 
+
+
 	class LOG4VENDOR_API log4vendor
 	{
 	public:
@@ -169,6 +188,8 @@ namespace cmb {
 		 */
 		static void init(const log_init_config& config, vtm_string& ret_msg);
 
+		static void initp(const log_init_config_c* pconfig, char pret_msg[VENDOR_BUFF_SIZE]);
+
 		virtual void log(int log_level, const vtm_string& text) = 0;
 
 		static std::basic_ostringstream<char>& get_oss();

+ 19 - 0
DevAdapter/self/liblog4vendor/log4vendor.cpp

@@ -122,6 +122,25 @@ namespace cmb {
 		config->log_dir = env.record_path;
 	}
 
+	void log4vendor::initp(const log_init_config_c* pconfig, char pret_msg[VENDOR_BUFF_SIZE])
+	{
+        std::string msg("");
+		if (pconfig != nullptr) {
+			log_init_config config1;
+			config1.dev_name = pconfig->dev_name;
+			config1.log_dir = pconfig->log_dir;
+			config1.log_level = pconfig->log_level;
+			config1.log_type = pconfig->log_type;
+
+			init(config1, msg);
+			if (!msg.empty()) {
+				strcpy(pret_msg, msg.c_str());
+			}
+		} else {
+			std::strcpy(pret_msg, "error param: nullptr");
+		}
+	}
+
 
 	void log4vendor::init(const log_init_config& config, std::string& ret_msg)
 	{