Linux C写日志文件

版权声明:本文为博主原创文章,转载请标明出处! https://blog.csdn.net/qq_27396861/article/details/77140807

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

猜你喜欢

转载自blog.csdn.net/qq_27396861/article/details/77140807