You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
511 lines
17 KiB
511 lines
17 KiB
/**
|
|
* Copyright 2019-2020 Hisilicon Technologies Co., Ltd.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef D_SYSLOG_H_
|
|
#define D_SYSLOG_H_
|
|
|
|
#ifdef __cplusplus
|
|
#ifndef LOG_CPP
|
|
extern "C" {
|
|
#endif
|
|
#endif // __cplusplus
|
|
|
|
#ifndef LINUX
|
|
#define LINUX 0
|
|
#endif // LINUX
|
|
|
|
#ifndef WIN
|
|
#define WIN 1
|
|
#endif
|
|
|
|
#ifndef OS_TYPE
|
|
#define OS_TYPE 0
|
|
#endif // OS_TYPE
|
|
|
|
#if (OS_TYPE == LINUX)
|
|
#define DLL_EXPORT __attribute__((visibility("default")))
|
|
#else
|
|
#define DLL_EXPORT _declspec(dllexport)
|
|
#endif
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* debug level id
|
|
*/
|
|
#define DLOG_DEBUG 0
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* info level id
|
|
*/
|
|
#define DLOG_INFO 1
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* warning level id
|
|
*/
|
|
#define DLOG_WARN 2
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* error level id
|
|
*/
|
|
#define DLOG_ERROR 3
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* don't print log
|
|
*/
|
|
#define DLOG_NULL 4
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* trace log print level id
|
|
*/
|
|
#define DLOG_TRACE 5
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* oplog log print level id
|
|
*/
|
|
#define DLOG_OPLOG 6
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* event log print level id
|
|
*/
|
|
#define DLOG_EVENT 0x10
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* max log length
|
|
*/
|
|
#define MSG_LENGTH 1024
|
|
#define DEBUG_LOG_MASK (0x00010000)
|
|
#define SECURITY_LOG_MASK (0x00100000)
|
|
#define RUN_LOG_MASK (0x01000000)
|
|
#define OPERATION_LOG_MASK (0x10000000)
|
|
#define RESERVERD_LENGTH 52
|
|
|
|
typedef struct tagDCODE {
|
|
const char *cName;
|
|
int cVal;
|
|
} DCODE;
|
|
|
|
typedef struct tagKV {
|
|
char *kname;
|
|
char *value;
|
|
} KeyValue;
|
|
|
|
typedef enum {
|
|
APPLICATION = 0,
|
|
SYSTEM
|
|
} ProcessType;
|
|
|
|
typedef struct {
|
|
ProcessType type;
|
|
unsigned int pid;
|
|
unsigned int deviceId;
|
|
char reserved[RESERVERD_LENGTH];
|
|
} LogAttr;
|
|
|
|
/**
|
|
* @ingroup slog
|
|
*
|
|
* module id
|
|
*/
|
|
enum {
|
|
SLOG, /**< Slog */
|
|
IDEDD, /**< IDE daemon device */
|
|
IDEDH, /**< IDE daemon host */
|
|
HCCL, /**< HCCL */
|
|
FMK, /**< Adapter */
|
|
HLAIENGINE, /**< Matrix */
|
|
DVPP, /**< DVPP */
|
|
RUNTIME, /**< Runtime */
|
|
CCE, /**< CCE */
|
|
#if (OS_TYPE == LINUX)
|
|
HDC, /**< HDC */
|
|
#else
|
|
HDCL,
|
|
#endif // OS_TYPE
|
|
DRV, /**< Driver */
|
|
MDCFUSION, /**< Mdc fusion */
|
|
MDCLOCATION, /**< Mdc location */
|
|
MDCPERCEPTION, /**< Mdc perception */
|
|
MDCFSM,
|
|
MDCCOMMON,
|
|
MDCMONITOR,
|
|
MDCBSWP, /**< MDC base software platform */
|
|
MDCDEFAULT, /**< MDC undefine */
|
|
MDCSC, /**< MDC spatial cognition */
|
|
MDCPNC,
|
|
MLL, /**< abandon */
|
|
DEVMM, /**< Dlog memory managent */
|
|
KERNEL, /**< Kernel */
|
|
LIBMEDIA, /**< Libmedia */
|
|
CCECPU, /**< aicpu shedule */
|
|
ASCENDDK, /**< AscendDK */
|
|
ROS, /**< ROS */
|
|
HCCP,
|
|
ROCE,
|
|
TEFUSION,
|
|
PROFILING, /**< Profiling */
|
|
DP, /**< Data Preprocess */
|
|
APP, /**< User Application */
|
|
TS, /**< TS module */
|
|
TSDUMP, /**< TSDUMP module */
|
|
AICPU, /**< AICPU module */
|
|
LP, /**< LP module */
|
|
TDT, /**< tsdaemon or aicpu shedule */
|
|
FE,
|
|
MD,
|
|
MB,
|
|
ME,
|
|
IMU,
|
|
IMP,
|
|
GE, /**< Fmk */
|
|
MDCFUSA,
|
|
CAMERA,
|
|
ASCENDCL,
|
|
TEEOS,
|
|
ISP,
|
|
SIS,
|
|
HSM,
|
|
DSS,
|
|
PROCMGR, // Process Manager, Base Platform
|
|
BBOX,
|
|
AIVECTOR,
|
|
TBE,
|
|
FV,
|
|
MDCMAP,
|
|
TUNE,
|
|
INVLID_MOUDLE_ID
|
|
};
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief External log interface, which called by modules
|
|
*/
|
|
DLL_EXPORT void dlog_init(void);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_getlevel: get module loglevel and enableEvent
|
|
*
|
|
* @param [in]moduleId: moudule id(see slog.h, eg: CCE), others: invalid
|
|
* @param [out]enableEvent: 1: enable; 0: disable
|
|
* @return: module level(0: debug, 1: info, 2: warning, 3: error, 4: null output)
|
|
*/
|
|
DLL_EXPORT int dlog_getlevel(int moduleId, int *enableEvent);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_setlevel: set module loglevel and enableEvent
|
|
*
|
|
* @param [in]moduleId: moudule id(see slog.h, eg: CCE), -1: all modules, others: invalid
|
|
* @param [in]level: log level(0: debug, 1: info, 2: warning, 3: error, 4: null output)
|
|
* @param [in]enableEvent: 1: enable; 0: disable, others:invalid
|
|
* @return: 0: SUCCEED, others: FAILED
|
|
*/
|
|
DLL_EXPORT int dlog_setlevel(int moduleId, int level, int enableEvent);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief CheckLogLevel: check module level enable or not
|
|
* users no need to call it because all dlog interface(include inner interface) has already called
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]logLevel: eg: DLOG_EVENT/DLOG_ERROR/DLOG_WARN/DLOG_INFO/DLOG_DEBUG
|
|
* @return: 1:enable, 0:disable
|
|
*/
|
|
DLL_EXPORT int CheckLogLevel(int moduleId, int logLevel);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogSetAttr: set log attr, default pid is 0, default device id is 0, default process type is APPLICATION
|
|
* @param [in]logAttr: attr info, include pid(must be larger than 0), process type and device id(chip ID)
|
|
* @return: 0: SUCCEED, others: FAILED
|
|
*/
|
|
DLL_EXPORT int DlogSetAttr(LogAttr logAttr);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_error: print error log
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define dlog_error(moduleId, fmt, ...) \
|
|
do { \
|
|
DlogErrorInner(moduleId, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_warn: print warning log
|
|
* call CheckLogLevel in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define dlog_warn(moduleId, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevel(moduleId, DLOG_WARN) == 1) { \
|
|
DlogWarnInner(moduleId, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_info: print info log
|
|
* call CheckLogLevel in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define dlog_info(moduleId, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevel(moduleId, DLOG_INFO) == 1) { \
|
|
DlogInfoInner(moduleId, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_debug: print debug log
|
|
* call CheckLogLevel in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define dlog_debug(moduleId, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevel(moduleId, DLOG_DEBUG) == 1) { \
|
|
DlogDebugInner(moduleId, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief dlog_event: print event log
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define dlog_event(moduleId, fmt, ...) \
|
|
do { \
|
|
DlogEventInner(moduleId, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief Dlog: print log, need caller to specify level
|
|
* call CheckLogLevel in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event)
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define Dlog(moduleId, level, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevel(moduleId, level) == 1) { \
|
|
DlogInner(moduleId, level, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogSub: print log, need caller to specify level and submodule
|
|
* call CheckLogLevel in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]submodule: eg: engine
|
|
* @param [in]level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event)
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define DlogSub(moduleId, submodule, level, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevel(moduleId, level) == 1) { \
|
|
DlogInner(moduleId, level, "[%s:%d][%s]" fmt, __FILE__, __LINE__, submodule, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogWithKV: print log, need caller to specify level and other paramters
|
|
* call CheckLogLevel in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event)
|
|
* @param [in]pstKVArray: key-value array
|
|
* @param [in]kvNum: key-value element num in array
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define DlogWithKV(moduleId, level, pstKVArray, kvNum, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevel(moduleId, level) == 1) { \
|
|
DlogWithKVInner(moduleId, level, pstKVArray, kvNum, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogFlush: flush log buffer to file
|
|
*/
|
|
DLL_EXPORT void DlogFlush(void);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief Internal log interface, other modules are not allowed to call this interface
|
|
*/
|
|
void DlogErrorInner(int moduleId, const char *fmt, ...)__attribute__((__format__(__printf__, 2, 3)));
|
|
void DlogWarnInner(int moduleId, const char *fmt, ...)__attribute__((__format__(__printf__, 2, 3)));
|
|
void DlogInfoInner(int moduleId, const char *fmt, ...)__attribute__((__format__(__printf__, 2, 3)));
|
|
void DlogDebugInner(int moduleId, const char *fmt, ...)__attribute__((__format__(__printf__, 2, 3)));
|
|
void DlogEventInner(int moduleId, const char *fmt, ...)__attribute__((__format__(__printf__, 2, 3)));
|
|
void DlogInner(int moduleId, int level, const char *fmt, ...)__attribute__((__format__(__printf__, 3, 4)));
|
|
void DlogWithKVInner(int moduleId, int level, KeyValue *pstKVArray, int kvNum, const char *fmt, ...);
|
|
|
|
#ifdef __cplusplus
|
|
#ifndef LOG_CPP
|
|
}
|
|
#endif // LOG_CPP
|
|
#endif // __cplusplus
|
|
|
|
#ifdef LOG_CPP
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogGetlevelForC: get module loglevel and enableEvent
|
|
*
|
|
* @param [in]moduleId: moudule id(see slog.h, eg: CCE), others: invalid
|
|
* @param [out]enableEvent: 1: enable; 0: disable
|
|
* @return: module level(0: debug, 1: info, 2: warning, 3: error, 4: null output)
|
|
*/
|
|
DLL_EXPORT int DlogGetlevelForC(int moduleId, int *enableEvent);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogSetlevelForC: set module loglevel and enableEvent
|
|
*
|
|
* @param [in]moduleId: moudule id(see slog.h, eg: CCE), -1: all modules, others: invalid
|
|
* @param [in]level: log level(0: debug, 1: info, 2: warning, 3: error, 4: null output)
|
|
* @param [in]enableEvent: 1: enable; 0: disable, others:invalid
|
|
* @return: 0: SUCCEED, others: FAILED
|
|
*/
|
|
DLL_EXPORT int DlogSetlevelForC(int moduleId, int level, int enableEvent);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief CheckLogLevelForC: check module level enable or not
|
|
* users no need to call it because all dlog interface(include inner interface) has already called
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]logLevel: eg: DLOG_EVENT/DLOG_ERROR/DLOG_WARN/DLOG_INFO/DLOG_DEBUG
|
|
* @return: 1:enable, 0:disable
|
|
*/
|
|
DLL_EXPORT int CheckLogLevelForC(int moduleId, int logLevel);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogSetAttrForC: set log attr, default pid is 0, default device id is 0, default process type is APPLICATION
|
|
* @param [in]logAttr: attr info, include pid(must be larger than 0), process type and device id(chip ID)
|
|
* @return: 0: SUCCEED, others: FAILED
|
|
*/
|
|
DLL_EXPORT int DlogSetAttrForC(LogAttr logAttr);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogForC: print log, need caller to specify level
|
|
* call CheckLogLevelForC in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event)
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define DlogForC(moduleId, level, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevelForC(moduleId, level) == 1) { \
|
|
DlogInnerForC(moduleId, level, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogSubForC: print log, need caller to specify level and submodule
|
|
* call CheckLogLevelForC in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]submodule: eg: engine
|
|
* @param [in]level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event)
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define DlogSubForC(moduleId, submodule, level, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevelForC(moduleId, level) == 1) { \
|
|
DlogInnerForC(moduleId, level, "[%s:%d][%s]" fmt, __FILE__, __LINE__, submodule, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogWithKVForC: print log, need caller to specify level and other paramters
|
|
* call CheckLogLevelForC in advance to optimize performance, call interface with fmt input take time
|
|
*
|
|
* @param [in]moduleId: module id, eg: CCE
|
|
* @param [in]level(0: debug, 1: info, 2: warning, 3: error, 5: trace, 6: oplog, 16: event)
|
|
* @param [in]pstKVArray: key-value array
|
|
* @param [in]kvNum: key-value element num in array
|
|
* @param [in]fmt: log content
|
|
*/
|
|
#define DlogWithKVForC(moduleId, level, pstKVArray, kvNum, fmt, ...) \
|
|
do { \
|
|
if (CheckLogLevelForC(moduleId, level) == 1) { \
|
|
DlogWithKVInnerForC(moduleId, level, pstKVArray, kvNum, "[%s:%d]" fmt, __FILE__, __LINE__, ##__VA_ARGS__); \
|
|
} \
|
|
} while (0)
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief DlogFlushForC: flush log buffer to file
|
|
*/
|
|
DLL_EXPORT void DlogFlushForC(void);
|
|
|
|
/**
|
|
* @ingroup slog
|
|
* @brief Internal log interface, other modules are not allowed to call this interface
|
|
*/
|
|
void DlogInnerForC(int moduleId, int level, const char *fmt, ...)__attribute__((__format__(__printf__, 3, 4)));
|
|
void DlogWithKVInnerForC(int moduleId, int level, KeyValue *pstKVArray, int kvNum, const char *fmt, ...);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif // LOG_CPP
|
|
#endif // D_SYSLOG_H_
|