一个同步日志系统的简单实现 log for c (linux 平台)

本文介绍了一种在Linux平台下用C语言编写的同步日志系统,适用于项目中的日志记录需求。作者提到正在开发异步日志系统。
摘要由CSDN通过智能技术生成

在一个项目中需要使用日志记录,网上也有很多开源代码,自己也尝试着写了一个!异步日志系统正在进行中。

//mylog.h  头文件
#ifndef _MYLOG_HEADER_
#define  _MYLOG_HEADER_

#ifdef __cpluscplus
extern "C"{
#endif

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <sys/epoll.h>
#include <sys/eventfd.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <time.h>
#include <error.h>

#define LOG_MAX_FILE_NAME	(64)
#define LOG_MAX_OUTPUT_NAME (128)

#define LOG_TIME_STR_LEN (21)

#define MAX_FILE_COUNT (50)

#define MAX_FILE_SIZE (1024*1024*3)

/****************
  每一个文件对于一个这样的结构体
  ,不管是多线程写还是单线程 
  都是对应一个描述文件的结构体
 ****************************/

typedef struct _log_file_t_
{
	FILE *fp;  //文件指针
	unsigned char filename[LOG_MAX_FILE_NAME];//输入文件的名字
	unsigned char output_filename[LOG_MAX_OUTPUT_NAME];//输出文件的名字
	unsigned int  filesize;// 当前文件的大小
	unsigned int  active_count;//写文件的线程数
}log_file_t;

typedef struct _log_t
{
	pthread_key_t key;
	pthread_mutex_t mutex;
	unsigned int roll_size;
	unsigned int max_filesize;
	log_file_t *file_count[MAX_FILE_COUNT];
	unsigned char last_time_str[LOG_TIME_STR_LEN+1];
	unsigned int file_index;
}f_log;


char* _log_create_filename(char* filename,char* output_filename);

#ifdef __cpluscplus
}
#endif

#endif


函数实现:

#include "mylog.h"

static f_log* g_log = NULL;
static pthread_once_t init_create = PTHREAD_ONCE_INIT;

/*********************

  内部函数实现

 ********************/
// 全局变量 初始化
static void _log_init()
{
	int i;
	f_log *temp_glo=NULL;
	temp_glo = (f_log*)malloc(sizeof(f_log));
	if(temp_glo == NULL)
	{
		printf("Can not malloc f_log!!!\r\n");
		return ;

	}
	pthread_mutex_init(&temp_glo->mute
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值