#ifndef __ERROR_H__ #define __ERROR_H__ #include "UtilityGlobal.h" #include "spdlog/spdlog.h" /* Log 等级 */ enum ccs_logging_level { logging_fatal = 1, /* Fatal: 用于打印system error日志 */ logging_err = 2, /* Error: 用于打印Error日志 */ logging_warn = 3, /* Warning: 用于打印Warning日志 */ logging_debug = 4, /* Debug: 用于打印专属Debug日志 */ logging_info = 5 /* Info: 用于打印自设的Info信息日志 */ }; /* 错误类型与业务执行返回 */ #define EXECUTE_SUCCESS 0x0 /* 执行成功返回 */ #define SYSTEM_ERROR 0x1 /* 执行返回中发生系统错误 */ #define EXECUTE_FAIL 0x2 /* 执行返回中发生业务错误 */ /* 错误代码 ERROR-CODE */ #define ERR_CODE_START 0 /* 自定义ERROR-Message */ #define USR_DESIGN_FATAL 1 #define USR_DESIGN_ERROR 2 #define USR_DESIGN_WARNING 3 #define USR_DESIGN_DEBUG 4 #define USR_DESIGN_INFO 5 /* 系统错误类型 */ enum ccs_system_errcode { SYS_ERR_START = 100, SYS_EPERM = 101, /* 参数错误 */ SYS_ENOENT = 102, /* 文件错误 */ SYS_ERR_END, SYS_WARN_START = 200, SYS_WARN_END, SYS_DEBUG_START = 300, SYS_DEBUG_END, SYS_INFO_START = 400, SYS_INFO_END, //... SYS_ERRC_END }; /* 业务错误类型 - 电气模块 */ enum ccsElectric_execute_errcode { ELE_ERR_START = 1000, ELE_NOT_INIT_ELECTRICMODEL = 1001, /* 电气模块未初始化 */ ELE_NOT_INIT_ELECTRICDIAGRAM = 1002, /* 电气的图元管理模块未初始化 */ ELE_NOT_INIT_ELECTRICDB = 1003, /* 电气的数据库操作模块未初始化 */ ELE_NOT_INIT_ELECTRICCAL = 1004, /* 电气的计算模块未初始化 */ ELE_UNKOWN_MEMBER_TYPE = 1005, /* 未识别的电气组合图元类型 */ ELE_FAIL_ADD_MEMBER_DIAGRAM = 1006, /* 电气图元map中插入新建图元失败 */ ELE_FAIL_TYPE_CHANGETO_CTOR = 1007, /* 电气由图元类型调用构造函数失败 */ ELE_KEY_EXIST_IN_JSON = 1008, /* 电气JSON对象已存在此key */ ELE_KEY_NOT_EXTST_IN_JSON = 1009, /* 电气JSON对象不存在此key */ ELE_SRE_INIT_FAIL = 1010, /* 电气计算模块初始化失败 */ ELE_KEY_NOT_EXTST_IN_MAP = 1011, /* 电气map对象不存在此key */ ELE_CREAT_SOURCE_TREE_FAIL = 1012, /* 生成一个短路点的馈电子树失败 */ ELE_ERR_END, ELE_WARN_START = 1100, ELE_WARN_END, ELE_DEBUG_START = 1200, ELE_DEBUG_END, ELE_INFO_START = 1300, ELE_INFO_END, //... ELE_ERRC_END = 1400 }; /* 业务错误类型 - 轮机模块 */ enum ccsTurbine_execute_errcode { TUBO_ERR_START = 1500, TUBO_NOT_INIT_ELECTRICMODEL = 1501, /* 轮机模块未初始化 */ TUBO_NOT_INIT_ELECTRICDIAGRAM = 1502, /* 轮机的图元管理模块未初始化 */ TUBO_NOT_INIT_ELECTRICDB = 1503, /* 轮机的数据库操作模块未初始化 */ TUBO_NOT_INIT_ELECTRICCAL = 1504, /* 轮机的计算模块未初始化 */ TUBO_UNKOWN_MEMBER_TYPE = 1505, /* 未识别的轮机组合图元类型 */ TUBO_FAIL_ADD_MEMBER_DIAGRAM = 1506, /* 轮机图元map中插入新建图元失败 */ TUBO_FAIL_TYPE_CHANGETO_CTOR = 1507, /* 轮机由图元类型调用构造函数失败 */ TUBO_KEY_EXIST_IN_JSON = 1508, /* 轮机JSON对象已存在此key */ TUBO_KEY_NOT_EXTST_IN_JSON = 1509, /* 轮机JSON对象不存在此key */ TUBO_SRE_INIT_FAIL = 1510, /* 轮机计算模块初始化失败 */ TUBO_ERR_END, TUBO_WARN_START = 1600, TUBO_WARN_END, TUBO_DEBUG_START = 1700, TUBO_DEBUG_END, TUBO_INFO_START = 1800, TUBO_INFO_END, //... TUBO_ERRC_END = 1900 }; /* 业务错误类型 - 数据集模块 */ enum dataset_execute_errcode{ DATASET_DATATABLE_NOT_EXIST =2500, /* 数据集中不存在该表名 */ DATASET_CONNECT_DATABASE_FAILED =25011, /* 创建数据库连接失败 */ }; #ifdef __cplusplus extern"C"{ #endif #define MAX_MESSAGE_LENGTH 1024 /* 初始化日志输出格式 */ void UTILITY_API init_log_format_setting(); /* 根据errcode打印日志: return 业务执行返回的错误类型 */ int UTILITY_API output_log(const char* file, int line, int errcode, ...); #ifdef _WIN32 // #define LOG_FATAL(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_FATAL, __VA_ARGS__); // #define LOG_ERROR(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_ERROR, __VA_ARGS__); // #define LOG_WARNING(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_WARNING, __VA_ARGS__); // #define LOG_DEBUG(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_DEBUG, __VA_ARGS__); // #define LOG_INFO(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_INFO, __VA_ARGS__); #define LOG(errcode, ...) err |= output_log(__FILE__, __LINE__, errcode, __VA_ARGS__); //切换编译器后改为##__VA_ARGS__ #define LOG_CHECK( check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, __VA_ARGS__);\ } #define LOG_CHECK_EXIT(check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, __VA_ARGS__);\ goto cleanup;\ } #define LOG_CHECK_CONTINUE( check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, __VA_ARGS__);\ continue;\ } #define LOG_CHECK_BREAK( check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, __VA_ARGS__);\ break;\ } #else #define LOG_FATAL(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_FATAL, ##__VA_ARGS__); #define LOG_ERROR(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_ERROR, ##__VA_ARGS__); #define LOG_WARNING(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_WARNING, ##__VA_ARGS__); #define LOG_DEBUG(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_DEBUG, ##__VA_ARGS__); #define LOG_INFO(...) err |= output_log(__FILE__, __LINE__, USR_DESIGN_INFO, ##__VA_ARGS__); #define LOG(errcode, ...) err |= output_log(__FILE__, __LINE__, errcode, ##__VA_ARGS__); //切换编译器后改为##__VA_ARGS__ #define LOG_CHECK( check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, ##__VA_ARGS__);\ } #define LOG_CHECK_EXIT(check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, ##__VA_ARGS__);\ goto cleanup;\ } #define LOG_CHECK_CONTINUE( check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, ##__VA_ARGS__);\ continue;\ } #define LOG_CHECK_BREAK( check_point, errcode, ...) \ if (!(check_point)) {\ err |= output_log(__FILE__, __LINE__, errcode, ##__VA_ARGS__);\ break;\ } #endif #ifdef __cplusplus } #endif #endif