Files
pvAccess/pvAccessApp/utils/logger.cpp
2011-06-07 08:31:41 -04:00

78 lines
1.7 KiB
C++

/*
* logger.cpp
*
* Created on: Dec 10, 2010
* Author: Miha Vitorovic
*/
#include <pv/logger.h>
#include <pv/noDefaultMethods.h>
#include <pv/lock.h>
#include <pv/pvType.h>
#include <epicsExit.h>
#include <errlog.h>
#include <fstream>
#include <iostream>
#include <time.h>
#include <cstring>
using namespace epics::pvData;
using std::ofstream;
using std::ios;
using std::endl;
namespace epics {
namespace pvAccess {
class FileLogger : public NoDefaultMethods {
public:
FileLogger(String name) {
logFile.open(name.data(), ios::app);
}
~FileLogger() {
logFile.close();
}
void logMessage(const char* message) {
time_t rawtime;
time(&rawtime);
char* timeStr = ctime(&rawtime);
timeStr[strlen(timeStr)-1]='\0'; // remove newline
logFile<<timeStr<<"\t"<<message; // the newline is added by the caller
}
private:
ofstream logFile;
};
static FileLogger* fileLogger = NULL;
static void errLogFileListener(void* pPrivate, const char *message) {
fileLogger->logMessage(message);
}
static void exitFileLoggerHandler(void* pPrivate) {
errlogFlush();
delete fileLogger;
}
void createFileLogger(String fname) {
static Mutex mutex;
Lock xx(mutex);
if(fileLogger==NULL) {
fileLogger = new FileLogger(fname);
errlogInit(2048);
errlogAddListener(errLogFileListener, NULL);
epicsAtExit(exitFileLoggerHandler, NULL);
}
}
}
}