一个写log的函数 log_func.c .

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

/***  user defined include file:   ***/

//#include <log_def.h>
#include "log_def.h"

extern int get_conf(char *name,char *value);

/******************************************************************************/
/* 模块说明:公用函数集                                                       */
/* 包括函数:                                                                  */
/*     void get_date_time()      取操作系统的日期和时间                       */
/*     int write_log()           记正常、错误日志或输出到屏幕上               */
/******************************************************************************/

/******************************************************************************/
/* 函数名称:void get_date_time()                                             */
/* 功    能:取操作系统的日期和时间                                           */
/* 输入输出:char *today    输出参数,返回日期                                */
/*           char *now_time 输出参数,返回时间                                */
                                                      */                                                                        */
/******************************************************************************/
void _get_date_time(char *today,char *now_time)
{
        struct tm *tp;
        time_t stClk;

        time(&stClk);
        tp=localtime(&stClk);
        sprintf(today,"%4d%02d%02d",tp->tm_year+1900,tp->tm_mon+1,tp->tm_mday);
        *(today+8)='/0';
        sprintf(now_time,"%02d%02d%02d",tp->tm_hour,tp->tm_min,tp->tm_sec);
        *(now_time+6)='/0';
}

/******************************************************************************/
/* 函数名称:int write_log()                                                  */
/* 功    能:记日志或输出到屏幕上                                             */
/* 输入输出:int iLog_flag  输入参数,记日志标志                              */
/*                  1: 正常日志,-1:错误日志,0:屏幕输出                    */
/*           char *pFormat  输入参数,格式输入参数                            */
/* 函数返回:0:正常    < 0:出错                                               */
/* 调用函数:_get_date_time                                                   */
/* 环境变量:RUN_HOME                                                         */
                              
/******************************************************************************/
int write_log(int iLog_flag,const char *pFormat, ...)
{
        va_list   ap_list;
        FILE      *fp;
        char      chToday[9],chNow_time[7],chFilename[80];
        char      pchFilepath[60],chMvname[80];
        struct stat stFilestat;

        _get_date_time(chToday, chNow_time);
        memset(chFilename,0x00,sizeof(chFilename));
//      get_conf("SYSLOG",pchFilepath);
        sprintf(pchFilepath,"/root/test");

        switch(iLog_flag){
                case NORMAL_LOG:
                        sprintf(chFilename,"%s/log%2.2s.dat",pchFilepath,chToday+6);
                        sprintf(chMvname,"%s/log%2.2s.bak",pchFilepath,chToday+6);
                        break;
                case ERROR_LOG:
                        sprintf(chFilename,"%s/err%s.dat",pchFilepath,chToday);
                //      sprintf(chFilename,"%s/err%2.2s.dat",pchFilepath,chToday);
                        sprintf(chMvname,"%s/err%2.2s.bak",pchFilepath,chToday+6);
                        break;
                case SCROUT_LOG:   /* 屏幕输出 */
                        break;
                default:
                        return(ERROR_PARAM_ERR);
        }

        /* 控制错误日志文件,跟踪日志文件大小为 1M */
        if(iLog_flag == NORMAL_LOG || iLog_flag == ERROR_LOG){
                if(stat(chFilename,&stFilestat) == 0){  /* 文件已存在 */
                        if(stFilestat.st_size >= 1024*1024){ 
                                rename(chFilename,chMvname);
                        }
                }
        }

        if(iLog_flag != SCROUT_LOG){
                fp = fopen(chFilename,"a");
                if(fp == (FILE *)NULL){
                        write_log(SCROUT_LOG,"open file [%s] error!/n",chFilename);
                        perror("open file");
                        return(ERROR_OPEN_FILE_ERR);
                }
        }

        va_start(ap_list, pFormat);
        if(iLog_flag == SCROUT_LOG){
                vfprintf(stdout, pFormat, ap_list);
        }
        else{
                fprintf(fp,"[%2.2s-%2.2s-%2.2s|%2.2s:%2.2s:%2.2s]: ", /
                     chToday+2,chToday+4,chToday+6,chNow_time,chNow_time+2,chNow_time+4);
                vfprintf(fp, pFormat, ap_list);
                fprintf(fp,"/n");       /* 换行 */
                fclose(fp);
        }
        va_end(ap_list);
        return(0);
}

http://blog.csdn.net/baqiao10/article/details/272176
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值