/****************************************************************************/ /* Copyright (c) 2007,许继集团有限公司 */ /* All rights reserved. */ /* */ /* 模块描述: */ /** 实现多种log信息的输出 * @file ai_log.h */ /* */ /* 日期 作者 注释 */ /* 2007/07/24 TYJ 创建文件 */ /****************************************************************************/ #ifndef IEC61850_AI_LOG_H #define IEC61850_AI_LOG_H #include "ai_def.h" #include "slog.h" #ifdef __cplusplus extern "C"{ #endif #define AI_LOG_FILE_EN //#define AI_LOG_STDOUT_EN #define AI_LOG_USER_EN #define AI_LOG_FILE_NAME "iec61850.log" /**< 默认日志输出的文件名 */ #define AI_LOG_FILE_SIZE 1000000L /**< 文件最大不超过1M */ #define AI_LOG_ERR 0x00000001 /**< 错误日志信息标志 */ #define AI_LOG_FLOW 0x00000002 /**< 流程日志信息标志 */ #define AI_LOG_DATA 0x00000004 /**< 数据日志信息标志 */ #define AI_LOG_TEST 0x00000008 /**< 测试日志信息标志 */ extern ST_UINT ai_log_sel; /**< 日志信息类型 */ extern SD_CONST ST_CHAR *SD_CONST ai_log_err_logstr; /**< 错误日志信息标题描述 */ extern SD_CONST ST_CHAR *SD_CONST ai_log_flow_logstr; /**< 流程日志信息标题描述 */ extern SD_CONST ST_CHAR *SD_CONST ai_log_data_logstr; /**< 数据日志信息标题描述 */ extern SD_CONST ST_CHAR *SD_CONST ai_log_test_logstr; /**< 测试日志信息标题描述 */ /** * 用户自定义日志输出接口,产生日志时会调用此接口输出日志 * @param logStr 要输出的日志信息 * @return ST_VOID */ extern ST_VOID (*user_log_put)(ST_CHAR *logStr); /** * 输出错误日志信息. * 输出包括日志的类型、时间、源文件名以及行数等信息,其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_ERR0(fmt) {\ if(ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt);} #define AI_LOG_FUN_ERR1(fmt,a) {\ if (ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt,a);} #define AI_LOG_FUN_ERR2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt,a, b);} #define AI_LOG_FUN_ERR3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt,a, b, c);} #define AI_LOG_FUN_ERR4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt,a, b, c, d);} #define AI_LOG_FUN_ERR5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e);} #define AI_LOG_FUN_ERR6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_ERR) \ _slog (sLogCtrl, ai_log_err_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_ERR0(fmt) #define AI_LOG_FUN_ERR1(fmt,a) #define AI_LOG_FUN_ERR2(fmt,a,b) #define AI_LOG_FUN_ERR3(fmt,a,b,c) #define AI_LOG_FUN_ERR4(fmt,a,b,c,d) #define AI_LOG_FUN_ERR5(fmt,a,b,c,d,e) #define AI_LOG_FUN_ERR6(fmt,a,b,c,d,e,f) #endif /** * 输出流程日志信息. * 输出包括日志的类型、时间、源文件名以及行数等信息,其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_FLOW0(fmt) {\ if(ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt);} #define AI_LOG_FUN_FLOW1(fmt,a) {\ if (ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt,a);} #define AI_LOG_FUN_FLOW2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt,a, b);} #define AI_LOG_FUN_FLOW3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt,a, b, c);} #define AI_LOG_FUN_FLOW4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt,a, b, c, d);} #define AI_LOG_FUN_FLOW5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e);} #define AI_LOG_FUN_FLOW6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_FLOW) \ _slog (sLogCtrl, ai_log_flow_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_FLOW0(fmt) #define AI_LOG_FUN_FLOW1(fmt,a) #define AI_LOG_FUN_FLOW2(fmt,a,b) #define AI_LOG_FUN_FLOW3(fmt,a,b,c) #define AI_LOG_FUN_FLOW4(fmt,a,b,c,d) #define AI_LOG_FUN_FLOW5(fmt,a,b,c,d,e) #define AI_LOG_FUN_FLOW6(fmt,a,b,c,d,e,f) #endif /** * 输出测试日志信息. * 输出包括日志的类型、时间、源文件名以及行数等信息,其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_TEST0(fmt) {\ if(ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt);} #define AI_LOG_FUN_TEST1(fmt,a) {\ if (ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt,a);} #define AI_LOG_FUN_TEST2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt,a, b);} #define AI_LOG_FUN_TEST3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt,a, b, c);} #define AI_LOG_FUN_TEST4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt,a, b, c, d);} #define AI_LOG_FUN_TEST5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e);} #define AI_LOG_FUN_TEST6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_TEST) \ _slog (sLogCtrl, ai_log_test_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_TEST0(fmt) #define AI_LOG_FUN_TEST1(fmt,a) #define AI_LOG_FUN_TEST2(fmt,a,b) #define AI_LOG_FUN_TEST3(fmt,a,b,c) #define AI_LOG_FUN_TEST4(fmt,a,b,c,d) #define AI_LOG_FUN_TEST5(fmt,a,b,c,d,e) #define AI_LOG_FUN_TEST6(fmt,a,b,c,d,e,f) #endif /** * 输出数据日志信息. * 输出包括日志的类型、时间、源文件名以及行数等信息,其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_DATA0(fmt) {\ if(ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt);} #define AI_LOG_FUN_DATA1(fmt,a) {\ if (ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt,a);} #define AI_LOG_FUN_DATA2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt,a, b);} #define AI_LOG_FUN_DATA3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt,a, b, c);} #define AI_LOG_FUN_DATA4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt,a, b, c, d);} #define AI_LOG_FUN_DATA5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e);} #define AI_LOG_FUN_DATA6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_DATA) \ _slog (sLogCtrl, ai_log_data_logstr, thisFileName, __LINE__, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_DATA0(fmt) #define AI_LOG_FUN_DATA1(fmt,a) #define AI_LOG_FUN_DATA2(fmt,a,b) #define AI_LOG_FUN_DATA3(fmt,a,b,c) #define AI_LOG_FUN_DATA4(fmt,a,b,c,d) #define AI_LOG_FUN_DATA5(fmt,a,b,c,d,e) #define AI_LOG_FUN_DATA6(fmt,a,b,c,d,e,f) #endif /** * 输出错误日志信息. * 输出不再包含日志的类型、时间、源文件名以及行数等信息,直接显示用户数据信息。 * 其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_ERRC0(fmt) {\ if(ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt);} #define AI_LOG_FUN_ERRC1(fmt,a) {\ if (ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt,a);} #define AI_LOG_FUN_ERRC2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt,a, b);} #define AI_LOG_FUN_ERRC3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt,a, b, c);} #define AI_LOG_FUN_ERRC4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt,a, b, c, d);} #define AI_LOG_FUN_ERRC5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt,a, b, c, d, e);} #define AI_LOG_FUN_ERRC6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_ERR) _slogc (sLogCtrl, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_ERRC0(fmt) #define AI_LOG_FUN_ERRC1(fmt,a) #define AI_LOG_FUN_ERRC2(fmt,a,b) #define AI_LOG_FUN_ERRC3(fmt,a,b,c) #define AI_LOG_FUN_ERRC4(fmt,a,b,c,d) #define AI_LOG_FUN_ERRC5(fmt,a,b,c,d,e) #define AI_LOG_FUN_ERRC6(fmt,a,b,c,d,e,f) #endif /** * 输出流程日志信息. * 输出不再包含日志的类型、时间、源文件名以及行数等信息,直接显示用户数据信息。 * 其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_FLOWC0(fmt) {\ if(ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt);} #define AI_LOG_FUN_FLOWC1(fmt,a) {\ if (ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt,a);} #define AI_LOG_FUN_FLOWC2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt,a, b);} #define AI_LOG_FUN_FLOWC3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt,a, b, c);} #define AI_LOG_FUN_FLOWC4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt,a, b, c, d);} #define AI_LOG_FUN_FLOWC5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt,a, b, c, d, e);} #define AI_LOG_FUN_FLOWC6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_FLOW) _slogc (sLogCtrl, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_FLOWC0(fmt) #define AI_LOG_FUN_FLOWC1(fmt,a) #define AI_LOG_FUN_FLOWC2(fmt,a,b) #define AI_LOG_FUN_FLOWC3(fmt,a,b,c) #define AI_LOG_FUN_FLOWC4(fmt,a,b,c,d) #define AI_LOG_FUN_FLOWC5(fmt,a,b,c,d,e) #define AI_LOG_FUN_FLOWC6(fmt,a,b,c,d,e,f) #endif /** * 输出测试日志信息. * 输出不再包含日志的类型、时间、源文件名以及行数等信息,直接显示用户数据信息。 * 其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_TESTC0(fmt) {\ if(ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt);} #define AI_LOG_FUN_TESTC1(fmt,a) {\ if (ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt,a);} #define AI_LOG_FUN_TESTC2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt,a, b);} #define AI_LOG_FUN_TESTC3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt,a, b, c);} #define AI_LOG_FUN_TESTC4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt,a, b, c, d);} #define AI_LOG_FUN_TESTC5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt,a, b, c, d, e);} #define AI_LOG_FUN_TESTC6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_TEST) _slogc (sLogCtrl, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_TESTC0(fmt) #define AI_LOG_FUN_TESTC1(fmt,a) #define AI_LOG_FUN_TESTC2(fmt,a,b) #define AI_LOG_FUN_TESTC3(fmt,a,b,c) #define AI_LOG_FUN_TESTC4(fmt,a,b,c,d) #define AI_LOG_FUN_TESTC5(fmt,a,b,c,d,e) #define AI_LOG_FUN_TESTC6(fmt,a,b,c,d,e,f) #endif /** * 输出数据日志信息. * 输出不再包含日志的类型、时间、源文件名以及行数等信息,直接显示用户数据信息。 * 其中fmt为描述信息,a、b...为参数的值 */ #if defined(DEBUG_SISCO) /**< 日志输出编译条件 */ #define AI_LOG_FUN_DATAC0(fmt) {\ if(ai_log_sel & AI_LOG_DATA) \ _slogc (sLogCtrl, fmt);} #define AI_LOG_FUN_DATAC1(fmt,a) {\ if (ai_log_sel & AI_LOG_DATA) _slogc (sLogCtrl, fmt,a);} #define AI_LOG_FUN_DATAC2(fmt,a,b) {\ if (ai_log_sel & AI_LOG_DATA) _slogc (sLogCtrl, fmt,a, b);} #define AI_LOG_FUN_DATAC3(fmt,a,b,c) {\ if (ai_log_sel & AI_LOG_DATA) _slogc (sLogCtrl, fmt,a, b, c);} #define AI_LOG_FUN_DATAC4(fmt,a,b,c,d) {\ if (ai_log_sel & AI_LOG_DATA) _slogc (sLogCtrl, fmt,a, b, c, d);} #define AI_LOG_FUN_DATAC5(fmt,a,b,c,d,e) {\ if (ai_log_sel & AI_LOG_DATA) _slogc (sLogCtrl, fmt,a, b, c, d, e);} #define AI_LOG_FUN_DATAC6(fmt,a,b,c,d,e,f) {\ if (ai_log_sel & AI_LOG_DATA) _slogc (sLogCtrl, fmt,a, b, c, d, e, f);} #else #define AI_LOG_FUN_DATAC0(fmt) #define AI_LOG_FUN_DATAC1(fmt,a) #define AI_LOG_FUN_DATAC2(fmt,a,b) #define AI_LOG_FUN_DATAC3(fmt,a,b,c) #define AI_LOG_FUN_DATAC4(fmt,a,b,c,d) #define AI_LOG_FUN_DATAC5(fmt,a,b,c,d,e) #define AI_LOG_FUN_DATAC6(fmt,a,b,c,d,e,f) #endif /** * 设置用户自定义日志输出接口 */ ST_VOID ai_init_log(ST_VOID); #ifdef __cplusplus } #endif #endif