COMPASSi/trunk/code/inc/Util/include/Error.h

186 lines
7.3 KiB
C

#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