LingYun Studio embeded system framwork software, such as thirdparty build shell and lingyun library
guowenxue
2021-07-17 dcb85398f505481db3a33d35049584b82b1397b9
update booster code for logger system and makefile
5 files modified
1 files added
160 ■■■■ changed files
booster/logger.c 83 ●●●●● patch | view | raw | blame | history
booster/logger.h 20 ●●●●● patch | view | raw | blame | history
booster/makefile 3 ●●●●● patch | view | raw | blame | history
booster/test/logger.c 42 ●●●●● patch | view | raw | blame | history
booster/test/makefile 4 ●●●● patch | view | raw | blame | history
booster/util_proc.c 8 ●●●● patch | view | raw | blame | history
booster/logger.c
@@ -20,7 +20,7 @@
/* This library is not thread safe */
static logger_t *logger = NULL;
char *log_str[LOG_LEVEL_MAX + 1] = { "", "F", "E", "W", "N", "D", "I", "T", "M" };
char *log_str[LOG_LEVEL_MAX + 1] = { "", "E", "W", "N", "D", "I", "M" };
#define LOG_TIME_FMT       "%Y-%m-%d %H:%M:%S"
@@ -32,8 +32,8 @@
    if (sig == SIGHUP)
    {
        signal(SIGHUP, log_signal_handler);
        log_fatal("SIGHUP received - reopenning log file [%s]", logger->file);
        logger_reopen();
        log_err("SIGHUP received - reopenning log file [%s]", logger->file);
        log_reopen();
    }
}
@@ -81,65 +81,44 @@
/* log_size unit is KB */
int logger_init(logger_t *log, char *log_file, int level, int log_size)
int log_open(logger_t *log, char *log_file, int level, int log_size)
{
    struct sigaction              act;
    char                         *filemode;
    if( !log )
    {
        printf("ERROR: Invalid input arguments\n");
        return -1;
    }
    if( log_file )
    {
        strncpy(log->file, log_file, FILENAME_LEN);
        log->flag |= FLAG_LOGGER_FILE;
    }
    else
    {
        strncpy(log->file, DBG_LOG_FILE, FILENAME_LEN);
        log->flag |= FLAG_LOGGER_CONSOLE;
    }
    log->level = level;
    log->size = log_size;
    /* set static global $logger point to argument $log  */
    logger = log;
    return 0;
}
int logger_open(void)
    /* use standard error as output */
    if( !log_file || log_file[0]=='\0' || !strcmp(log_file, LOG_STDERR))
{
    struct sigaction act;
    char *filemode;
    if(!logger)
    {
        printf("ERROR: logger not initialise\n");
        return -1;
    }
    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
    if ('\0' == logger->file[0])
    {
        printf("ERROR: Logger filename not set\n");
        return -1;
    }
    if (!strcmp(logger->file, DBG_LOG_FILE))
    {
        logger->fp = stderr;
        log_rollback_size = LOG_ROLLBACK_NONE;
        strncpy(logger->file, LOG_STDERR, FILENAME_LEN);
        logger->flag |= FLAG_LOGGER_CONSOLE;
        logger->level = level;
        logger->fp = stderr;
        log_rollback_size = LOG_ROLLBACK_NONE;
        goto OUT;
    }
    strncpy(logger->file, log_file, FILENAME_LEN);
    logger->flag |= FLAG_LOGGER_FILE;
    logger->level = level;
    logger->size = log_size;
    log_rollback_size = log_size <= 0 ? LOG_ROLLBACK_NONE : log_size*1024;    /* Unit KiB */
    filemode = (log_rollback_size==LOG_ROLLBACK_NONE) ? "a+" : "w+";
    logger->fp = fopen(logger->file, filemode);
    if (NULL == logger->fp)
    if ( !logger->fp )
    {
        fprintf(stderr, "Open log file \"%s\" in %s failure: %s\n", logger->file, filemode, strerror(errno));
        return -2;
@@ -152,11 +131,10 @@
  OUT:
    logger_banner("Initialize");
    return 0;
}
void logger_close(void)
void log_close(void)
{
    if (!logger || !logger->fp )
        return;
@@ -172,15 +150,13 @@
    return ;
}
int logger_reopen(void)
int log_reopen(void)
{
    int rc = 0;
    char *filemode;
    if( !logger )
        return -1;
    log_rollback_size = logger->size <= 0 ? LOG_ROLLBACK_NONE : logger->size*1024;    /* Unit KiB */
    if (logger->flag & FLAG_LOGGER_CONSOLE )
    {
@@ -191,7 +167,7 @@
    if (logger->fp)
    {
        logger_close();
        log_close();
        filemode = log_rollback_size==LOG_ROLLBACK_NONE ? "a+" : "w+";
        logger->fp = fopen(logger->file, filemode); 
        
@@ -210,15 +186,6 @@
    return rc;
}
void logger_term(void)
{
    if(!logger)
        return ;
    logger_close();
    logger = NULL;
}
void logger_raw(const char *fmt, ...)
{
booster/logger.h
@@ -32,7 +32,7 @@
#define FILENAME_LEN                64
#endif
#define DBG_LOG_FILE                "stderr"  /*  Debug mode log file is console */
#define LOG_STDERR                 "stderr"  /*  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  */
@@ -45,13 +45,11 @@
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,
};
@@ -76,14 +74,12 @@
extern char *log_str[];
/* log_size unit is KB */
extern int  logger_init(logger_t *logger, char *filename, int level, int log_size);
extern int  logger_open(void);
extern void logger_set_time_format(char *time_format);
extern int  logger_reopen(void);
extern void logger_close(void);
extern void logger_term(void);
extern void logger_raw(const char *fmt, ...);
extern int  log_open(logger_t *logger, char *filename, int level, int log_size);
extern int  log_reopen(void);
extern void log_close(void);
/* lowlvel API */
extern void logger_raw(const char *fmt, ...);
extern void logger_min(int level, char *fmt, ...);
extern void logger_line(int level, char *file, int line, char *fmt, ...);
extern void logger_str(int level, const char *msg);
@@ -92,21 +88,17 @@
#define LOG_FILE_LINE      /* Log the file and line */
#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_min(LOG_LEVEL_TRACE, fmt, ##__VA_ARGS__)
#define log_info(fmt, ...)  logger_min(LOG_LEVEL_INFO, fmt, ##__VA_ARGS__)
#define log_dbg(fmt, ...)   logger_min(LOG_LEVEL_DEBUG, fmt, ##__VA_ARGS__)
#define log_nrml(fmt, ...)  logger_min(LOG_LEVEL_NRML, fmt, ##__VA_ARGS__)
#define log_warn(fmt, ...)  logger_min(LOG_LEVEL_WARN, fmt, ##__VA_ARGS__)
#define log_err(fmt, ...)   logger_min(LOG_LEVEL_ERROR, fmt, ##__VA_ARGS__)
#define log_fatal(fmt, ...) logger_min(LOG_LEVEL_FATAL, fmt, ##__VA_ARGS__)
#endif
#endif   /* ----- #ifndef _LOGGER_H_  ----- */
booster/makefile
@@ -13,3 +13,6 @@
    @rm -f *.o
    @rm -f *.a
distclean:
    @make clean
    @rm -f cscope.* tags
booster/test/logger.c
New file
@@ -0,0 +1,42 @@
/*********************************************************************************
 *      Copyright:  (C) 2021 LingYun IoT System Studio
 *                  All rights reserved.
 *
 *       Filename:  logger.c
 *    Description:  This file is logger system sample code.
 *
 *        Version:  1.0.0(17/07/21)
 *         Author:  Guo Wenxue <guowenxue@gmail.com>
 *      ChangeLog:  1, Release initial version on "17/07/21 15:51:04"
 *
 ********************************************************************************/
#include "logger.h"
#define LOG_FILE      "test.log"
int main (int argc, char **argv)
{
    int             rv;
    logger_t        log;
#ifdef LOG_FILE
    if( log_open(&log, "test.log", LOG_LEVEL_NRML, 512) < 0 )
#else
    if( log_open(&log, LOG_STDERR, LOG_LEVEL_DEBUG, LOG_ROLLBACK_NONE) < 0 )
#endif
    {
        fprintf(stderr, "initialise logger system failure, rv=%d\n", rv);
        return -1;
    }
    log_info("logger level [information] message\n");
    log_dbg ("logger level [   debug   ] message\n");
    log_nrml("logger level [   normal  ] message\n");
    log_warn("logger level [  warnning ] message\n");
    log_err ("logger level [    error  ] message\n");
    log_close();
    return 0;
}
booster/test/makefile
@@ -23,4 +23,8 @@
clean:
    @rm -f ${BINARIES} 
    @rm -f *.log
distclean:
    @make clean
    @rm -f cscope.* tags
booster/util_proc.c
@@ -209,7 +209,7 @@
    { 
        if (mkdir(ipc_dir, mode) < 0) 
        { 
            log_fatal("cannot create %s: %s\n", ipc_dir, strerror(errno));
            log_err("cannot create %s: %s\n", ipc_dir, strerror(errno));
            return -1; 
        } 
        
@@ -229,7 +229,7 @@
    } 
    else 
    {
        log_fatal("cannot create %s: %s\n", pid_file, strerror(errno));
        log_err("cannot create %s: %s\n", pid_file, strerror(errno));
        return -1;
    }
@@ -257,7 +257,7 @@
    } 
    else
    {
        log_fatal("Can't open PID record file %s: %s\n", pid_file, strerror(errno));
        log_err("Can't open PID record file %s: %s\n", pid_file, strerror(errno));
        return -1;
    } 
    return pid;
@@ -360,7 +360,7 @@
    
    if (record_daemon_pid(pid_file) < 0) 
    { 
        log_fatal("Record PID to file \"%s\" failure.\n", pid_file);
        log_err("Record PID to file \"%s\" failure.\n", pid_file);
        return -2;
    }