diff --git a/pvAccessApp/utils/logger.cpp b/pvAccessApp/utils/logger.cpp index a0178cd..5db347e 100644 --- a/pvAccessApp/utils/logger.cpp +++ b/pvAccessApp/utils/logger.cpp @@ -62,6 +62,11 @@ namespace epics { g_pvAccessLogLevel = level; } + bool pvAccessIsLoggable(pvAccessLogLevel level) + { + return level >= g_pvAccessLogLevel; + } + class FileLogger : public NoDefaultMethods { public: FileLogger(String const & name) { diff --git a/pvAccessApp/utils/logger.h b/pvAccessApp/utils/logger.h index 92f9fa8..401cf54 100644 --- a/pvAccessApp/utils/logger.h +++ b/pvAccessApp/utils/logger.h @@ -38,6 +38,7 @@ namespace pvAccess { void pvAccessLog(pvAccessLogLevel level, const char* format, ...); void pvAccessSetLogLevel(pvAccessLogLevel level); + bool pvAccessIsLoggable(pvAccessLogLevel level); #if defined (__GNUC__) && __GNUC__ < 3 #define LOG(level, format, ARGS...) pvAccessLog(level, format, ##ARGS) @@ -45,7 +46,8 @@ namespace pvAccess { #define LOG(level, format, ...) pvAccessLog(level, format, ##__VA_ARGS__) #endif #define SET_LOG_LEVEL(level) pvAccessSetLogLevel(level) - + #define IS_LOGGABLE(level) pvAccessIsLoggable(level) + // EPICS errlog //#define LOG errlogSevPrintf //#define SET_LOG_LEVEL(level) errlogSetSevToLog(level) diff --git a/testApp/remote/eget.cpp b/testApp/remote/eget.cpp index 43190e9..7190fdf 100644 --- a/testApp/remote/eget.cpp +++ b/testApp/remote/eget.cpp @@ -931,7 +931,7 @@ public: // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel get create: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel get create: " << status << std::endl; } // assign smart pointers @@ -946,7 +946,7 @@ public: } else { - std::cerr << "[" << m_channelName << "] failed to create channel get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to create channel get: " << status << std::endl; m_event.signal(); } } @@ -958,7 +958,7 @@ public: // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel get: " << status << std::endl; } // access smart pointers @@ -982,7 +982,7 @@ public: } else { - std::cerr << "[" << m_channelName << "] failed to get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to get: " << status << std::endl; { Lock lock(m_pointerMutex); // this is OK since caller holds also owns it @@ -1047,7 +1047,7 @@ public: // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel RPC create: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel RPC create: " << status << std::endl; } // assign smart pointers @@ -1060,7 +1060,7 @@ public: } else { - std::cerr << "[" << m_channelName << "] failed to create channel get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to create channel get: " << status << std::endl; m_connectionEvent.signal(); } } @@ -1072,7 +1072,7 @@ public: // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel RPC: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel RPC: " << status << std::endl; } // access smart pointers @@ -1093,7 +1093,7 @@ public: } else { - std::cerr << "[" << m_channelName << "] failed to RPC: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to RPC: " << status << std::endl; { Lock lock(m_pointerMutex); // this is OK since caller holds also owns it diff --git a/testApp/remote/pvget.cpp b/testApp/remote/pvget.cpp index 557aeed..289c5bb 100644 --- a/testApp/remote/pvget.cpp +++ b/testApp/remote/pvget.cpp @@ -130,7 +130,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel get create: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel get create: " << status << std::endl; } // assign smart pointers @@ -145,7 +145,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester } else { - std::cerr << "[" << m_channelName << "] failed to create channel get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to create channel get: " << status << std::endl; m_event.signal(); } } @@ -157,7 +157,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel get: " << status << std::endl; } // access smart pointers @@ -181,7 +181,7 @@ class ChannelGetRequesterImpl : public ChannelGetRequester } else { - std::cerr << "[" << m_channelName << "] failed to get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to get: " << status << std::endl; { Lock lock(m_pointerMutex); // this is OK since caller holds also owns it @@ -247,13 +247,13 @@ class MonitorRequesterImpl : public MonitorRequester // TODO and exit if (!startStatus.isSuccess()) { - std::cerr << "[" << m_channelName << "] channel monitor start: " << startStatus.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel monitor start: " << startStatus << std::endl; } } else { - std::cerr << "monitorConnect(" << status.toString() << ")" << std::endl; + std::cerr << "monitorConnect(" << status << ")" << std::endl; } } diff --git a/testApp/remote/pvput.cpp b/testApp/remote/pvput.cpp index 4f33c18..8eb0cfc 100644 --- a/testApp/remote/pvput.cpp +++ b/testApp/remote/pvput.cpp @@ -641,7 +641,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel put create: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel put create: " << status << std::endl; } // assign smart pointers @@ -660,7 +660,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester } else { - std::cerr << "[" << m_channelName << "] failed to create channel put: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to create channel put: " << status << std::endl; m_event->signal(); } } @@ -672,7 +672,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel get: " << status << std::endl; } m_done.set(); @@ -696,7 +696,7 @@ class ChannelPutRequesterImpl : public ChannelPutRequester } else { - std::cerr << "[" << m_channelName << "] failed to get: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to get: " << status << std::endl; } m_event->signal(); @@ -709,14 +709,14 @@ class ChannelPutRequesterImpl : public ChannelPutRequester // show warning if (!status.isOK()) { - std::cerr << "[" << m_channelName << "] channel put: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] channel put: " << status << std::endl; } m_done.set(); } else { - std::cerr << "[" << m_channelName << "] failed to put: " << status.toString() << std::endl; + std::cerr << "[" << m_channelName << "] failed to put: " << status << std::endl; } m_event->signal(); diff --git a/testApp/remote/pvutils.cpp b/testApp/remote/pvutils.cpp index aab2432..e0c2a37 100644 --- a/testApp/remote/pvutils.cpp +++ b/testApp/remote/pvutils.cpp @@ -9,6 +9,8 @@ #include #include +#include + using namespace std; using namespace std::tr1; using namespace epics::pvData; @@ -29,6 +31,29 @@ void RequesterImpl::message(String const & message, MessageType messageType) std::cerr << "[" << getRequesterName() << "] message(" << message << ", " << getMessageTypeName(messageType) << ")" << std::endl; } +std::ostream& operator<<(std::ostream& o, const Status& s) +{ + o << '[' << Status::StatusTypeName[s.getType()] << "] "; + String msg = s.getMessage(); + if (!msg.empty()) + { + o << msg; + } + else + { + o << "(no error message)"; + } + // dump stack trace only if on debug mode + if (IS_LOGGABLE(logLevelDebug)) + { + String sd = s.getStackDump(); + if (!sd.empty()) + { + o << std::endl << sd; + } + } + return o; +} char separator = ' '; void terseSeparator(char c) @@ -203,12 +228,12 @@ void ChannelRequesterImpl::channelCreated(const epics::pvData::Status& status, C // show warning if (!status.isOK()) { - std::cerr << "[" << channel->getChannelName() << "] channel create: " << status.toString() << std::endl; + std::cerr << "[" << channel->getChannelName() << "] channel create: " << status << std::endl; } } else { - std::cerr << "[" << channel->getChannelName() << "] failed to create a channel: " << status.toString() << std::endl; + std::cerr << "[" << channel->getChannelName() << "] failed to create a channel: " << status << std::endl; } } @@ -256,7 +281,7 @@ void GetFieldRequesterImpl::getDone(const epics::pvData::Status& status, epics:: // show warning if (!status.isOK()) { - std::cerr << "[" << m_channel->getChannelName() << "] getField create: " << status.toString() << std::endl; + std::cerr << "[" << m_channel->getChannelName() << "] getField create: " << status << std::endl; } // assign smart pointers @@ -268,7 +293,7 @@ void GetFieldRequesterImpl::getDone(const epics::pvData::Status& status, epics:: else { // do not complain about missing field - //std::cerr << "[" << m_channel->getChannelName() << "] failed to get channel introspection data: " << status.toString() << std::endl; + //std::cerr << "[" << m_channel->getChannelName() << "] failed to get channel introspection data: " << status << std::endl; } m_event.signal(); diff --git a/testApp/remote/pvutils.h b/testApp/remote/pvutils.h index 00d3bd7..4931478 100644 --- a/testApp/remote/pvutils.h +++ b/testApp/remote/pvutils.h @@ -86,3 +86,4 @@ class GetFieldRequesterImpl : bool waitUntilFieldGet(double timeOut); }; +std::ostream& operator<<(std::ostream& o, const epics::pvData::Status& s);