/******************************************************************************** * Copyright: (C) 2018 LingYun IoT System Studio * All rights reserved. * * Filename: logger.h * Description: This file is the linux infrastructural logger system library * * Version: 1.0.0(08/08/2018~) * Author: Guo Wenxue * ChangeLog: 1, Release initial version on "08/08/2018 05:16:56 PM" * ********************************************************************************/ #ifndef __LOGGER_H_ #define __LOGGER_H_ #include #include #include #include #include #include #include #include #include #include #include #define LOG_VERSION_STR "2.0.0" #ifndef FILENAME_LEN #define FILENAME_LEN 64 #endif #define DEFAULT_LOGFILE "logger.log" #define DBG_LOG_FILE "console" /* Debug mode log file is console */ #define LOG_ROLLBACK_SIZE 512 /* Default rollback log size */ #define LOG_ROLLBACK_NONE 0 /* Set rollback size to 0 will not rollback */ #define MAX_LOG_MESSAGE_LEN 0x1000 //#define DUMPLICATE_OUTPUT /* Log to file and printf on console */ #define LOG_FILE_LINE /* Log the file and line */ enum { LOG_LEVEL_DISB = 0, /* Disable "Debug" */ LOG_LEVEL_FATAL, /* Debug Level "Fatal" */ LOG_LEVEL_ERROR, /* Debug Level "ERROR" */ LOG_LEVEL_WARN, /* Debug Level "warnning" */ LOG_LEVEL_NRML, /* Debug Level "Normal" */ LOG_LEVEL_DEBUG, /* Debug Level "Debug" */ LOG_LEVEL_INFO, /* Debug Level "Information" */ LOG_LEVEL_TRACE, /* Debug Level "Trace" */ LOG_LEVEL_MAX, }; #define LOGGER_CONSOLE 1<<1 #define LOGGER_FILE 0<<1 #define LOGGER_LEVEL_OPT 1<<2 /* The log level is sepcified by the command option */ typedef struct _st_logger { unsigned char flag; /* This logger pointer is malloc() or passed by argument */ char file[FILENAME_LEN]; int level; int size; FILE *fp; } st_logger; /* log_size unit KB */ extern int logger_init(char *filename, int level, int log_size); extern int logger_reopen(void); extern void logger_term(void); extern void logger_comm(int level, char *fmt, ...); extern void logger_line(int level, char *file, int line, char *fmt, ...); extern void logger_dump(int level, char *buf, int len); #ifdef LOG_FILE_LINE #define log_trace(fmt, ...) logger_line(LOG_LEVEL_TRACE, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #define log_info(fmt, ...) logger_line(LOG_LEVEL_INFO, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #define log_dbg(fmt, ...) logger_line(LOG_LEVEL_DEBUG, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #define log_nrml(fmt, ...) logger_line(LOG_LEVEL_NRML, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #define log_warn(fmt, ...) logger_line(LOG_LEVEL_WARN, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #define log_err(fmt, ...) logger_line(LOG_LEVEL_ERROR, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #define log_fatal(fmt, ...) logger_line(LOG_LEVEL_FATAL, __FILE__, __LINE__, fmt, ##__VA_ARGS__) #else #define log_trace(fmt, ...) logger_comm(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__) #define log_info(fmt, ...) logger_comm(tLOG_LEVEL_INFO, fmt, ##__VA_ARGS__) #define log_dbg(fmt, ...) logger_comm(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__) #define log_nrml(fmt, ...) logger_comm(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__) #define log_warn(fmt, ...) logger_comm(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__) #define log_err(fmt, ...) logger_comm(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__) #define log_fatal(fmt, ...) logger_comm(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__) #endif #endif /* __LOGGER_H_ */