linux记录进程日志,Linux下实现跟踪程序执行信息记录日志文件

//debug.h

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

FileName : debug.h

FileFunc : 头文件

Version : V0.1

Author : Sunrier

Date : 2012-06-09

Descp : Linux下实现跟踪程序执行信息记录日志文件

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

#ifndef _DEBUG_H_

#define _DEBUG_H_

#ifdef __cplusplus

extern "C" {

#endif

#include

#include

#include

#include

#include

#include

#include

#define ERROR __FILE__,__LINE__,0x01

#define DEBUG __FILE__,__LINE__,0x02

void GetCurrentTime(char *pTime);

void SetLogName(char *pLogPath,char *pProcName,char *pLogName);

void TRACE_LOG(char *pFileName,int iLine,int iLogType,char *pLogName,const char *fmt, ...);

#ifdef __cplusplus

}

#endif

#endif

//debug.c

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

FileName : debug.c

FileFunc : 实现文件

Version : V0.1

Author : Sunrier

Date : 2012-06-09

Descp : Linux下实现跟踪程序执行信息记录日志文件

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

#include "debug.h"

void GetCurrentTime(char *pTime)

{

time_t t;

struct tm tm1;

t=time(NULL);

memcpy(&tm1,localtime(&t),sizeof(struct tm));

sprintf(pTime,"%04d%02d%02d%02d%02d%02d",tm1.tm_year+1900,tm1.tm_mon+1,tm1.tm_mday,tm1.tm_hour,tm1.tm_min,tm1.tm_sec);

}

void SetLogName(char *pLogPath,char *pProcName,char *pLogName)

{

char szTime[15];

DIR *pDir = NULL;

memset(szTime,0,sizeof(szTime));

GetCurrentTime(szTime);

pDir = opendir(pLogPath);

if( pDir==NULL )

{

mkdir(pLogPath,S_IREAD|S_IWRITE|S_IEXEC);

}

else

{

closedir(pDir);

}

sprintf(pLogName,"%s/%s%.6s.log",pLogPath,pProcName,&szTime[2]);

}

void TRACE_LOG(char *pFileName,int iLine,int iLogType,char *pLogName,const char *fmt, ...)

{

FILE *fp;

va_list vap;

char szTime[15];

char szLogType[10];

char szTemp[512];

int iLen=0;

memset(szTime,0,sizeof(szTime));

memset(szLogType,0,sizeof(szLogType));

memset(szTemp,0,sizeof(szTemp));

GetCurrentTime(szTime);

va_start(vap,fmt);

if(iLogType==0x01)

{

strcpy(szLogType,"ERROR");

}

else if(iLogType==0x02)

{

strcpy(szLogType,"DEBUG");

}

sprintf(szTemp,"[%14s][P%d][%10s][L%04d][%.6s]:\n",szTime,getpid(),pFileName,iLine,szLogType);

//iLen=strlen(pLogName)-10;

//memcpy(pLogName+iLen,&szTime[2],6);

fp=fopen(pLogName,"a+");

fprintf(fp,"%s",szTemp);

vfprintf(fp,fmt,vap);

fprintf(fp,"\n");

fflush(fp);

fclose(fp);

fprintf(stderr,"[%s][P%d][%s][%d]:",szLogType,getpid(),pFileName,iLine);

memset(szTemp,0,sizeof(szTemp));

vsprintf(szTemp,fmt,vap);

va_end(vap);

fprintf(stderr,"%s\n",szTemp);//打印到屏幕

fflush(stderr);

}

//demo.c

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

FileName : demo.c

FileFunc : 跟踪程序执行信息并把相应执行结果记录到日志文件

Version : V0.1

Author : Sunrier

Date : 2012-06-09

Descp : Linux下实现跟踪程序执行信息记录日志文件

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

#include

#include

#include "debug.h"

int func( int iFlag )

{

if( iFlag )

{

return 0;

}

else

{

return 1;

}

}

int main(int argc,char *argv[])

{

char szLogPath[100],szProcName[100],szLogName[100];

char *p = NULL;

int iRetCode = 0;

int iFlag = 0;

memset(szLogPath,0,sizeof(szLogPath));

memset(szProcName,0,sizeof(szProcName));

memset(szLogName,0,sizeof(szLogName));

p = strrchr(argv[0],'/');

sprintf(szProcName,"%s_",p);

sprintf(szLogPath,"%s/log",getenv("HOME"));

SetLogName(szLogPath,szProcName,szLogName);

iFlag = 0;

iRetCode = func( iFlag );

if( iRetCode )

{

TRACE_LOG(ERROR,szLogName,"func error,iRetCode=[%d]\n",iRetCode);

return 1;

}

TRACE_LOG(DEBUG,szLogName,"Success =[%d]\n",iRetCode);

//TRACE_LOG(DEBUG,"Success !");

return 0;

}

//makefile

#makefile

demo:demo.c debug.c debug.h

@gcc -o demo demo.c debug.c

clean:

@cd /mnt/hgfs/Sunrier/code/ && \

ls | grep -v ^makefile$$ | grep -v [.]c$$ | grep -v [.]h$$ | grep -v [.]sql$$ | grep -v [.]sh$$ | xargs rm -rf

#makefile

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值