/********************************************************************************
|
* 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 <guowenxue@gmail.com>
|
* ChangeLog: 1, Release initial version on "08/08/2018 05:16:56 PM"
|
*
|
********************************************************************************/
|
|
#ifndef __LOGGER_H_
|
#define __LOGGER_H_
|
|
#include <stdarg.h>
|
#include <stdio.h>
|
#include <stdlib.h>
|
#include <string.h>
|
#include <unistd.h>
|
#include <signal.h>
|
#include <time.h>
|
#include <errno.h>
|
|
#include <pthread.h>
|
#include <sys/types.h>
|
#include <sys/time.h>
|
|
#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_ */
|