制作旋转器的功能,每天创建一个时间戳

时间:2012-04-09 10:32:31

标签: c++ logging rotator logrotate log-rotation

我有一个日志项目,我需要知道如何构建一个功能,以便旋转器检查程序运行时的每一分钟,并为每一分钟创建时间戳只是为了将所有日期的时间戳存储到日志文件中,请帮助。

感谢

2 个答案:

答案 0 :(得分:0)

一个示例Async Timer类,以满足您的需求......

MyPeriodicTimer.hh

#include "MyTimeOutHandler.hh"
#include <pthread.h>
#include <iostream>

using namespace std;

void* func(void* ptr);


class MyPeriodicTimer
{
    public:
       MyPeriodicTimer(MyTimeOutHandler* handler,int ms){
            milliSecondsM = ms;
            handlerM = handler;
            createClock();
       }
       void act(){
            time_t rawtime;
            time ( &rawtime );
            handlerM->handleTimeOut(&rawtime);
            sleep(milliSecondsM);
       }
       pthread_t getThread(){
           return clockThreadM;
       }
private:

   void createClock(){
        int retVal = pthread_create( &clockThreadM,NULL,&func,(void*)this);
        pthread_join(clockThreadM,NULL);
    }
    int milliSecondsM;
    MyTimeOutHandler* handlerM;
    pthread_t clockThreadM;
};


void* func(void* obj){
    while(1){
      (reinterpret_cast<MyPeriodicTimer*>(obj))->act();
   }
}

定义用于处理超时的接口

MyTimeOutHandler.hh

#ifndef MY_TIMEOUT_HANDLER_HH
#define MY_TIMEOUT_HANDLER_HH

#include <time.h>

class MyTimeOutHandler{
  public:
    virtual void handleTimeOut(time_t*) = 0;
};


#endif

创建LogHandler

LogHandler.cc

#include "MyTimeOutHandler.hh"
#include "MyPeriodicTimer.hh"
#include <iostream>
#include <time.h>

using namespace std;

class LogHandler : public MyTimeOutHandler{

  public:

    void start(int ms){
    MyPeriodicTimer timer(this,ms);
    }

    /* CallBack when timer is fired */
    void handleTimeOut(time_t* time){
        // Implement your Logging functionality Here
    cout<<"Time : "<<ctime(time)<<endl;
    }

};

int main(){
    LogHandler l;
    l.start(60);
     return 0;
}

输出:

>g++ -pthread LogHandler.cc

>./a.out
Time : Tue Apr 10 17:24:17 2012
Time : Tue Apr 10 17:25:17 2012
Time : Tue Apr 10 17:26:17 2012

答案 1 :(得分:-1)

我建议使用互斥锁进行检查:http://msdn.microsoft.com/en-us/library/ms686927%28VS.85%29.aspx 时间戳和日志文件与它无关。使用MSDN - 你会找到例子。