文件日志打印

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
  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值