From e40e18388415917c0bf2a4e508199c2c29fceca1 Mon Sep 17 00:00:00 2001 From: miha_vitorovic Date: Fri, 10 Dec 2010 15:12:28 +0100 Subject: [PATCH] Added logger which is implemented using standard EPICSv3 logging facilities. --- pvAccessApp/testUtils/Makefile | 6 ++- pvAccessApp/testUtils/loggerTest.cpp | 28 ++++++++++ pvAccessApp/utils/Makefile | 2 + pvAccessApp/utils/logger.cpp | 77 ++++++++++++++++++++++++++++ pvAccessApp/utils/logger.h | 31 +++++++++++ 5 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 pvAccessApp/testUtils/loggerTest.cpp create mode 100644 pvAccessApp/utils/logger.cpp create mode 100644 pvAccessApp/utils/logger.h diff --git a/pvAccessApp/testUtils/Makefile b/pvAccessApp/testUtils/Makefile index 70a80db..42ae5c7 100644 --- a/pvAccessApp/testUtils/Makefile +++ b/pvAccessApp/testUtils/Makefile @@ -18,11 +18,15 @@ PROD_HOST += growingCircularBufferTest growingCircularBufferTest_SRCS += growingCircularBufferTest.cpp growingCircularBufferTest_LIBS += pvAccessUtils Com - PROD_HOST += inetAddressUtilsTest inetAddressUtilsTest_SRCS += inetAddressUtilsTest.cpp inetAddressUtilsTest_LIBS += pvAccessUtils Com +PROD_HOST += loggerTest +loggerTest_SRCS += loggerTest.cpp +loggerTest_LIBS += pvAccessUtils Com + + include $(TOP)/configure/RULES #---------------------------------------- # ADD RULES AFTER THIS LINE diff --git a/pvAccessApp/testUtils/loggerTest.cpp b/pvAccessApp/testUtils/loggerTest.cpp new file mode 100644 index 0000000..55fae09 --- /dev/null +++ b/pvAccessApp/testUtils/loggerTest.cpp @@ -0,0 +1,28 @@ +/* + * loggerTest.cpp + * + * Created on: Dec 10, 2010 + * Author: Miha Vitorovic + */ + +#include "logger.h" + +#include +#include + +#include + +using namespace epics::pvAccess; +using std::cout; + +int main(int argc, char *argv[]) { + + createFileLogger("loggerTest.log"); + + errlogSetSevToLog(errlogMinor); + errlogSevPrintf( errlogInfo, "This will not appear"); + errlogSevPrintf( errlogMajor, "This is a test %d", 42); + errlogSevPrintf( errlogFatal, "This is another test %f", 3.14); + + epicsExit(0); +} diff --git a/pvAccessApp/utils/Makefile b/pvAccessApp/utils/Makefile index e5ed21c..7e7a593 100644 --- a/pvAccessApp/utils/Makefile +++ b/pvAccessApp/utils/Makefile @@ -7,10 +7,12 @@ INC += wildcharMatcher.h INC += arrayFIFO.h INC += growingCircularBuffer.h INC += inetAddressUtil.h +INC += logger.h LIBSRCS += hexDump.cpp LIBSRCS += wildcharMatcher.cpp LIBSRCS += inetAddressUtil.cpp +LIBSRCS += logger.cpp LIBRARY = pvAccessUtils pvAccessUtils_LIBS += Com diff --git a/pvAccessApp/utils/logger.cpp b/pvAccessApp/utils/logger.cpp new file mode 100644 index 0000000..9044231 --- /dev/null +++ b/pvAccessApp/utils/logger.cpp @@ -0,0 +1,77 @@ +/* + * logger.cpp + * + * Created on: Dec 10, 2010 + * Author: Miha Vitorovic + */ + +#include "logger.h" + +#include +#include +#include + +#include +#include + +#include +#include +#include +#include + +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<logMessage(message); + } + + static void exitFileLoggerHandler(void* pPrivate) { + errlogFlush(); + delete fileLogger; + } + + void createFileLogger(String fname) { + static Mutex mutex = Mutex(); + Lock xx(&mutex); + + if(fileLogger==NULL) { + fileLogger = new FileLogger(fname); + errlogInit(2048); + errlogAddListener(errLogFileListener, NULL); + epicsAtExit(exitFileLoggerHandler, NULL); + } + } + + } +} diff --git a/pvAccessApp/utils/logger.h b/pvAccessApp/utils/logger.h new file mode 100644 index 0000000..5275f43 --- /dev/null +++ b/pvAccessApp/utils/logger.h @@ -0,0 +1,31 @@ +/* + * logger.h + * + * Created on: Dec 10, 2010 + * Author: Miha Vitorovic + */ + +#ifndef LOGGER_H_ +#define LOGGER_H_ + +#include + +using epics::pvData::String; + +namespace epics { + namespace pvAccess { + + /** + * Create a logger that will write to file indicated by the fname. + * After creation you are free to use standard EPICSv3 functions from + * errlog.h. + * + * @param[in] fname The file to write to. If the file exists, it + * is opened for append. + */ + void createFileLogger( String fname ); + + } +} + +#endif /* LOGGER_H_ */