zoukankan      html  css  js  c++  java
  • linux环境应用程序LOG日志打印(C语言)

    下面是前段时间做项目用到的一个输出LOG日志的代码,每个文件最多记录10W行,超过10W行,将当前日志文件重命名,重新再打开。直接看代码吧,很简单!

    int InitTCpRtpLog()
    {
    
        char log[256];
    
        mkdir(TCP_RTP_LOG_PATH, 0755);
    
        snprintf(log, sizeof(log), "%s/%s", TCP_RTP_LOG_PATH, TCP_RTP_LOG_FILE);
        vTcpRtpLogHandle = fopen((char*)log, "a");
        if (vTcpRtpLogHandle){
                PrintMsgTrace("###%s(),creat log file %s sucessfull!
    ",__FUNCTION__, log);
    
            return 0;
        }else{
            PrintMsgTrace("###$s(), Fail openning event log file (errno=%s)
    ", __FUNCTION__, strerror(errno));
    
            return  - 1;
        }
    }
    static int _rebuildTcpRtpLogFiles()
    {
    
        char tmp[256];
        char tmp2[256];
        char date[128];
        time_t now;
        struct tm ptm;
        
    
        if (vTcpRtpLogHandle)
        {
            fclose(vTcpRtpLogHandle);
            time(&now);
            localtime_r(&now,&ptm);
            strftime((char *)date, 128, "_%F_%T", &ptm);
    
            snprintf(tmp, sizeof(tmp), "%s/%s", TCP_RTP_LOG_PATH, TCP_RTP_LOG_FILE);
            snprintf(tmp2, sizeof(tmp2), "%s_%s.log", tmp,date);
    
            remove(tmp2);
            rename(tmp, tmp2);
    
            vTcpRtpLogHandle = fopen((char*)tmp, "a");
        }
    
        return 1;
    }
    
    
    void LogTcpRtp(char *p_fmt, ...)
    {
        char date[256];
        time_t now;
        struct tm ptm;
        va_list ap;
    
    
        if (!vTcpRtpLogHandle){
            return;
        }
    
        pthread_mutex_lock(&_vTcpRtpLogMutex);
    
        time(&now);                   // Gets the system time
    
        if (localtime_r(&now, &ptm))
        {
            strftime(date, sizeof (date), "%F %T", &ptm);
            fprintf(vTcpRtpLogHandle, "[ %s ]:", date);
    
            va_start(ap, p_fmt);
            vfprintf(vTcpRtpLogHandle, p_fmt, ap);
            va_end(ap);
    
            fflush(vTcpRtpLogHandle);
    
            _vCurTcpRtpLogNum++;
            if (_vCurTcpRtpLogNum > MAX_RTP_TCP_NUMBER){
                _rebuildTcpRtpLogFiles();
                _vCurTcpRtpLogNum = 0;
            }
        }
    
        pthread_mutex_unlock(&_vTcpRtpLogMutex);
    }


     

  • 相关阅读:
    贪心例题
    第十六周总结
    软件工程个人课程总结
    冲刺二十一天
    浅谈async/await
    浅谈设计模式的六大原则
    dotnetcore配置框架简介
    这一次,终于弄懂了协变和逆变
    科个普:进程、线程、并发、并行
    五分钟了解Semaphore
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3271506.html
Copyright © 2011-2022 走看看