log_file.c文件
#include <time.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdint.h>
#include <stdarg.h>
#include "log_file.h"
#define LOG_FILE_BUFF_MAX 2048
typedef struct log_file_ref_struct {
bool log_file_print;
FILE* log_file_fp;
} log_file_ref_t;
static log_file_ref_t logfiledata;
int log_file_init(bool mode, char * path){
logfiledata.log_file_fp=NULL;
logfiledata.log_file_print=0;
if (mode == 1 && (path != NULL)){
logfiledata.log_file_fp=fopen(path,"w+");
if(logfiledata.log_file_fp==NULL){
printf("log file %s can't open\n",path);
return LOG_FILE_PRINTERROR;
}
return LOG_FILE_PRINTFILE;
}
if (mode ==0){
logfiledata.log_file_print=1;
return LOG_FILE_PRINTUSER;
}
return LOG_FILE_PRINTERROR;
}
void log_file_deinit(){
logfiledata.log_file_print=0;
if(logfiledata.log_file_fp){
fclose(logfiledata.log_file_fp);
logfiledata.log_file_fp = NULL;
}
}
int log_file_print(const char *p_fmt, ... ){
va_list ap;
va_start( ap, p_fmt );
log_file_out( p_fmt, ap );
va_end( ap );
return 0;
}
int log_file_out(const char *p_fmt, va_list ap ){
char msg_buf[LOG_FILE_BUFF_MAX];
time_t t_now = time( NULL );
struct tm *p_tm = localtime( &t_now );
// GET TIME
int len = snprintf( msg_buf, LOG_FILE_BUFF_MAX,
"%04d-%02d-%02d %02d:%02d:%02d :",
p_tm->tm_year + 1900, p_tm->tm_mon + 1, p_tm->tm_mday,
p_tm->tm_hour, p_tm->tm_min, p_tm->tm_sec);
vsnprintf( msg_buf + len, LOG_FILE_BUFF_MAX - len, p_fmt, ap );
if( logfiledata.log_file_fp ){
fprintf( logfiledata.log_file_fp, "%s\n", msg_buf);
fflush( logfiledata.log_file_fp );
}
if(logfiledata.log_file_print)
printf("%s\n",msg_buf);
return 0;
}
log_file.h文件
#ifndef LOG_FILE_H
#define LOG_FILE_H
#include <stdint.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C"
{
#endif
#define LOG_FILE_BUFF_MAX 2048
/**
* @enum LogFilePrintModeE
* @brief Enumeration of print mode
*/
typedef enum LogFilePrintModeE {
LOG_FILE_PRINTERROR,
LOG_FILE_PRINTUSER,
LOG_FILE_PRINTFILE,
}LogFilePrintModeE;
int log_file_init(bool mode, char * path);
void log_file_deinit();
int log_file_print(const char *p_fmt, ... );
int log_file_out(const char *p_fmt, va_list ap );
#define LOG_FILE(...) \
log_file_print(__VA_ARGS__);
#ifdef __cplusplus
}
#endif
#endif