myxce/src/include/xcelog.h

85 lines
2.8 KiB
C

#ifndef _XCELOG_H_
#define _XCELOG_H_
#include "tlog.h"
#include <pthread.h>
static pthread_mutex_t log_mutex = PTHREAD_MUTEX_INITIALIZER;
static int xce_log_initialized = 0;
typedef enum {
XCE_LOG_DEBUG3 = TLOG_DEBUG3,
XCE_LOG_DEBUG2 = TLOG_DEBUG2,
XCE_LOG_DEBUG = TLOG_DEBUG,
XCE_LOG_INFO = TLOG_INFO,
XCE_LOG_NOTICE = TLOG_NOTICE,
XCE_LOG_WARN = TLOG_WARN,
XCE_LOG_ERROR = TLOG_ERROR,
XCE_LOG_FATAL = TLOG_FATAL,
XCE_LOG_OFF = TLOG_OFF,
XCE_LOG_END = TLOG_END
} LogLevel;
static inline int xce_init_xcecd_log(const char* log_file, int log_size,
int log_level)
{
int ret;
pthread_mutex_lock(&log_mutex);
if (!xce_log_initialized) {
ret = tlog_init(log_file, log_size, 6, 0, 0);
if (ret != 0) {
tlog(TLOG_ERROR, "XCECD start tlog failed.\n");
return -1;
}
tlog_setlevel(log_level);
xce_log_initialized = 1;
}
pthread_mutex_unlock(&log_mutex);
return 0;
}
static inline int xce_init_xcecdwk_log(const char* log_file, int log_size,
int log_level)
{
int ret;
pthread_mutex_lock(&log_mutex);
if (!xce_log_initialized) {
ret = tlog_init(log_file, log_size, 6, 0, 0);
if (ret != 0) {
tlog(TLOG_ERROR, "XCECD_WORKER start tlog failed.\n");
return -1;
}
tlog_setlevel(log_level);
xce_log_initialized = 1;
}
pthread_mutex_unlock(&log_mutex);
return 0;
}
#define XCECD_LOG(level, format, ...) \
do { \
pthread_mutex_lock(&log_mutex); \
tlog((int)(level), format __VA_OPT__(, ) __VA_ARGS__); \
pthread_mutex_unlock(&log_mutex); \
} while (0)
#define XCECD_WORKER_LOG(level, format, ...) \
do { \
pthread_mutex_lock(&log_mutex); \
tlog((int)(level), format __VA_OPT__(, ) __VA_ARGS__); \
pthread_mutex_unlock(&log_mutex); \
} while (0)
/* For different XCE modules we can have customized macros. Here is an example
* of XCECD log micro.
*/
#define CONTROLLER_LOG(level, format, ...) \
tlog((int)level, format __VA_OPT__(, ) __VA_ARGS__)
#define SCHEDULER_LOG(level, format, ...) \
tlog((int)level, format __VA_OPT__(, ) __VA_ARGS__)
static inline void xce_log_fini() { tlog_exit(); }
#endif