编写一个简单的日志系统

在编写服务器代码的时候,往往需要编写一个日志模块。日志系统可以存放一些服务器运行情况的相关数据,方便后面服务器出现bug时可以查看相关的问题。
日志系统的实现主要分为两个功能
1.获取当前的时间
2.将相关内容写入日志文件
获取当前时间
主要用到了以下函数及结构体

#include <time.h>
 
   localtime - 将时间数值变换成本地时间,考虑到本地时区和夏令时标志
 
   函数声明:
       #include <time.h>
 
       struct tm * localtime(const time_t *timer);
 
 
   time - 获取计算机系统当前的日历时间(Calender Time)
          处理日期时间的函数都是以本函数的返回值为基础进行运算
 
   函数原型:
       #include <time.h>
  
       time_t time(time_t *calptr);
 
   返回值:
       成功:秒数,从1970-1-1,00:00:00
 
   使用:
       time_t now;
   
       time(&now); // == now = time(NULL);
struct tm {
    int tm_sec;     //秒,    范围从0到59 
    int tm_min;     //分,    范围从0到59 
    int tm_hour;    //小时,  范围从0到23 
    int tm_mday;    //一个月中的第几天,范围从1到31 
    int tm_mon;     //月份,  范围从0到11 
    int tm_year;    //自 1900起的年数
    int tm_wday;    //一周中的第几天,范围从0到6 
    int tm_yday;    //一年中的第几天,范围从0到365 
    int tm_isdst;   //夏令时 
};

写入日志文件
先创建一个日志文件,这里我在当前目录下面创建了一个test.log。文件操作主要用到了以下函数

#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int open(const char* path,int flag,/*int mode*/);
//返回值:<0 出错>=0 成功
filename:打开的文件名(只给文件名,只会在当前目录下搜索)
flag:文件打开的方式:
                  读:O_RDONLY  写:O_WRONLY   读写:O_RDWR 
                  追加:O_APPEND  创建:O_CREAT(只有文件不存在时,才会生效,创建一个新的文件)
mode:创建文件时,指定文件的权限   0nnn
int write(int fd,void *buf,size_t size);
fd:写入的对象(open打开的文件)
buf:写入数据的起始位置
size:写入数据的长度(字节)
返回值:出错 -1|已经写入的数据长度
int close(int fd);关闭打开的文件
fd:操作的文件返回值: -1出错
                      0成功

实验完整代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
int log(char* content)
{
	//每记录一次要在末尾记录,所以这里运用了追加功能,用或运算
	int fd = open("./test.log", O_WRONLY|O_APPEND);
	if(fd == -1)
	{
		printf("open failure\n");
		return -1;
	}
	
	struct tm * pTM;
	time_t nSeconds;
	char datetime[23];
	time(&nSeconds);
    pTM = localtime(&nSeconds);
	 /* 系统日期和时间,格式: yyyymmddHHMMSS */
    sprintf(datetime, "[%04d-%02d-%02d %02d:%02d:%02d]",
            pTM->tm_year + 1900, pTM->tm_mon + 1, pTM->tm_mday,
            pTM->tm_hour, pTM->tm_min, pTM->tm_sec);
	
	char log[1024];
	sprintf(log, "%s %s\n", datetime, content);
	
	int ret = write(fd, log, strlen(log));
	if(ret == - -1)
	{
		printf("写入失败!");
		return -1;
	}
	close(fd);
	return 0;
			
}
int main()
{	
	char content[1024];
	printf("please input content\n");
	scanf("%s", content);
	
	if(log("content") == -1)
		printf("log failure\n!");
	else
		printf("log succeed!\n");	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值