diff --git a/easylogger/plugins/file/elog_file.c b/easylogger/plugins/file/elog_file.c index e028e50..9db0867 100644 --- a/easylogger/plugins/file/elog_file.c +++ b/easylogger/plugins/file/elog_file.c @@ -34,33 +34,31 @@ #include #include + /* initialize OK flag */ static bool init_ok = false; -static FILE *fp; -static int fd; -static Elog_File_Cfg file; - -static void elog_file_config_init(Elog_File_Cfg *file); +static FILE *fp = NULL; +static int fd = -1; +static ElogFileCfg local_cfg; -ElogErrCode elog_file_init(void) +ElogErrCode elog_file_init(void) { ElogErrCode result = ELOG_NO_ERR; + ElogFileCfg cfg; + if (init_ok) goto __exit; - elog_file_config_init(&file); + elog_file_port_init(); - fp = fopen(file.name, "a+"); - if (fp) - fd = fileno(fp); - else - fd = -1; + cfg.name = ELOG_FILE_NAME; + cfg.max_size = ELOG_FILE_MAX_SIZE; - elog_file_port_init(); + elog_file_config(&cfg); init_ok = true; __exit: - return result; + return result; } void elog_file_write(const char *log, size_t size) @@ -72,17 +70,17 @@ void elog_file_write(const char *log, size_t size) statbuf.st_size = 0; fstat(fd, &statbuf); - - if (unlikely(statbuf.st_size > file.max_size)) - return ; + if (unlikely(statbuf.st_size > local_cfg.max_size)) + return; elog_file_port_lock(); fwrite(log, size, 1, fp); + #ifdef ELOG_FILE_FLUSH_CAHCE_ENABLE fflush(fp); fsync(fd); -#endif +#endif elog_file_port_unlock(); } @@ -95,8 +93,22 @@ void elog_file_deinit(void) fclose(fp); } -static void elog_file_config_init(Elog_File_Cfg *file) +void elog_file_config(ElogFileCfg *cfg) { - file->name = ELOG_FILE_NAME; - file->max_size = ELOG_FILE_MAX_SIZE; + if (fp) { + fclose(fp); + } + + elog_file_port_lock(); + + local_cfg.name = cfg->name; + local_cfg.max_size = cfg->max_size; + + fp = fopen(local_cfg.name, "a+"); + if (fp) + fd = fileno(fp); + else + fd = -1; + + elog_file_port_unlock(); } diff --git a/easylogger/plugins/file/elog_file.h b/easylogger/plugins/file/elog_file.h index 4ed1b32..03c9fdc 100644 --- a/easylogger/plugins/file/elog_file.h +++ b/easylogger/plugins/file/elog_file.h @@ -28,6 +28,7 @@ #ifndef __ELOG_FILE__H__ #define __ELOG_FILE__H__ + #include #include @@ -35,7 +36,7 @@ extern "C" { #endif -/* EasyLogger file log plugin's software version number */ +/* EasyLogger file log plugin's software version number */ #define ELOG_FILE_SW_VERSION "V1.0.0" #ifdef linux #define likely(x) __builtin_expect(!!(x), 1) @@ -46,13 +47,14 @@ extern "C" { #endif typedef struct { - char *name;/* file name */ - size_t max_size;/* file max size */ -} Elog_File_Cfg; + char *name; /* file name */ + size_t max_size; /* file max size */ +} ElogFileCfg; /* elog_file.c */ ElogErrCode elog_file_init(void); void elog_file_write(const char *log, size_t size); +void elog_file_config(ElogFileCfg *cfg); void elog_file_deinit(void); /* elog_file_port.c */ diff --git a/easylogger/plugins/file/elog_file_cfg.h b/easylogger/plugins/file/elog_file_cfg.h index 0dd75c9..c1d6973 100644 --- a/easylogger/plugins/file/elog_file_cfg.h +++ b/easylogger/plugins/file/elog_file_cfg.h @@ -30,9 +30,9 @@ #define _ELOG_FILE_CFG_H_ /* EasyLogger file log plugin's using file name */ -#define ELOG_FILE_NAME +#define ELOG_FILE_NAME /* @note you must define it for a value */ /* EasyLogger file log plugin's using file max size */ -#define ELOG_FILE_MAX_SIZE +#define ELOG_FILE_MAX_SIZE /* @note you must define it for a value */ #endif /* _ELOG_FILE_CFG_H_ */ diff --git a/easylogger/plugins/file/elog_file_port.c b/easylogger/plugins/file/elog_file_port.c index 2342df4..8ae77d6 100644 --- a/easylogger/plugins/file/elog_file_port.c +++ b/easylogger/plugins/file/elog_file_port.c @@ -38,28 +38,8 @@ ElogErrCode elog_file_port_init(void) ElogErrCode result = ELOG_NO_ERR; /* add your code here */ - - return result; -} - -/** - * flush file cache - */ -void elog_file_port_flush_cache(Elog_File *file) { - - /* add your code here */ - -} -/** - * get file current size - */ -size_t elog_file_port_get_size(Elog_File *file) -{ - - /* add your code here */ - - return 0; + return result; } /** @@ -79,6 +59,7 @@ void elog_file_port_unlock(void) { /* add your code here */ } + /** * file log deinit */