Linux C写日志文件

dLog.c

#include "dLog.h"	//dlog.h文件在后面

/**********************************************************
    function: dLog
    description: 写日志信息
    Input: dIfomSource: 信息来源
		   dIfomLevel: 信息级别
           dFmt: 信息格式
    Output:
    Return: D_SUCCEED: 成功, 失败退出
    others:
***********************************************************/
int dLog( char* dIfomSource, char* dIfomLevel, char* dFmt, ... )
{
	int ret = 0;
	va_list vaList;
	char tmpBuf[ MAX_RECORD_LEN + 1 ];
	char tmpTime[ 14 + 1 ];
	FILE* fp;

	/* 0: print in terminal 
	 * 1: print in log file */
	int fTorF = ( dLogPath[0] == '\0' || dLogPrefix[0] == '\0' ) ? 0 : 1; //判断是打印终端还是文件
	memset( tmpTime, 0, sizeof(tmpTime) );
	getCurrTime( tmpTime );

	if ( fTorF )
	{
		sprintf( tmpBuf, "%s/%s%8.8s.runlog", dLogPath, dLogPrefix, tmpTime );
		fp = fopen( tmpBuf, "a" );
		if ( NULL == fp )
		{
			fprintf( stderr, "[%4.4s%2.2s%2.2s%2.2s%2.2s%2.2s][%s][%s][%s]\n",
					tmpTime,
					tmpTime + 4,
					tmpTime + 6,
					tmpTime + 8,
					tmpTime + 10,
					tmpTime + 12,
					INFO_SOURCE_SYS, INFO_LEVEL_EXIT, "不能打开日志文件" );
			fclose( fp );
			fp = NULL;
			exit(1);
		}
	}
	sprintf( tmpBuf, "[%4.4s%2.2s%2.2s%2.2s%2.2s%2.2s][%s][%s]",
			tmpTime,
			tmpTime + 4,
			tmpTime + 6,
			tmpTime + 8,
			tmpTime + 10,
			tmpTime + 12,
			dIfomSource, dIfomLevel );
	if ( fTorF )
	{
		fprintf( fp, "%s", tmpBuf );
	}
	else
	{
		fprintf( stdout, "%s", tmpBuf );
	}
	va_start( vaList, dFmt );
	if ( fTorF )
	{
		vfprintf( fp, dFmt, vaList );
	}
	else
	{
		vsprintf( tmpBuf, dFmt, vaList );
		printf( "%s", tmpBuf );
	}
	va_end( vaList );
	if ( 0 == strcmp( dIfomLevel, INFO_LEVEL_EXIT ) )
	{
		sprintf( tmpBuf, "[%4.4s%2.2s%2.2s%2.2s%2.2s%2.2s][%s][%s][%s]\n",
				tmpTime,
				tmpTime + 4,
				tmpTime + 6,
				tmpTime + 8,
				tmpTime + 10,
				tmpTime + 12,
				INFO_SOURCE_SYS, INFO_LEVEL_EXIT, "发生异常情况,程序退出!\n" );
		if( fTorF )
		{
			fprintf( fp, "%s", tmpBuf );
		}
		else
		{
			printf( "%s", tmpBuf );
		}
		fclose( fp );
		fp = NULL;
		exit(1);
	}
	if ( NULL != fp )
	{
		fclose(fp);
		fp = NULL;
	}
	ret = D_SUCCEED;
	return ret;
}

/**********************************************************
    function: getCurrTime
    description: 获取当前系统时间
    Input: outTimeStr: 保存时间的字符串
    Output:
    Return: D_SUCCEED: 成功
    others:
***********************************************************/
int getCurrTime( char* outTimeStr )
{
	int ret = 0;
	time_t tTime;
	struct tm *tmTime;
	struct timeval mTime;
	time( &tTime );
	tmTime = localtime( &tTime );
	gettimeofday( &mTime, NULL );
	sprintf( outTimeStr, "%04d%02d%02d%02d%02d%02d",
			tmTime->tm_year + 1900, tmTime->tm_mon + 1,
			tmTime->tm_mday, tmTime->tm_hour,
			tmTime->tm_min, tmTime->tm_sec );
	ret = D_SUCCEED;
	return ret;
}

dLog.h:

#ifndef _DLOG_H_
#define _DLOG_H_

#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>
#include <sys/time.h>
#include <stdlib.h>

#define MAX_RECORD_LEN	2048	/* 记录最大长度 */

#define D_SUCCEED		0		/* 自定义正确状态值 */
#define D_FAIL			1		/* 自定义错误状态值 */

#define INFO_LEVEL_GEN	"gen"	/* 普通信息 */
#define INFO_LEVEL_WARN	"warn"	/* 告警信息 */
#define INFO_LEVEL_EXIT	"exit"	/* 严重警告 */

#define INFO_SOURCE_APP	"app"	/* 进程自身产生的信息 */
#define INFO_SOURCE_DB	"db"	/* 数据库产生的信息 */
#define INFO_SOURCE_SYS	"sys"	/* 除进程自身、数据库以外的信息, 如因进程调度等其他原因产生的信息 */

char dLogPath[512];			/* 日志文件存放路径 */
char dLogPrefix[128];		/* 日志文件前缀 */

int dLog( char* dIfomSource, char* dIfomLevel, char* dFmt, ... );
int getCurrTime( char* outTimeStr );	/* 得到当前时间 */

#endif
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值