Logging API changes

Remove would_log() : callbacks receive all log messages so they can
do custom filtering individually.

Also move popup message handling into the private (d-ptr) of sglog(),
to keep the header as minimal impossible (no include of <vector>)
This commit is contained in:
James Turner
2018-12-20 16:10:36 +00:00
parent 232cbbac5e
commit 1be3e5771a
4 changed files with 19 additions and 39 deletions
+12 -27
View File
@@ -398,6 +398,8 @@ public:
/// and hence should dynamically reflect console logging settings
CallbackVec m_consoleCallbacks;
std::vector<std::string> m_popupMessages;
sgDebugClass m_logClass;
sgDebugPriority m_logPriority;
bool m_isRunning = false;
@@ -506,25 +508,11 @@ public:
PauseThread pause(this);
m_logPriority = p;
m_logClass = c;
BOOST_FOREACH(simgear::LogCallback* cb, m_consoleCallbacks) {
for (auto cb : m_consoleCallbacks) {
cb->setLogLevels(c, p);
}
}
bool would_log( sgDebugClass c, sgDebugPriority p ) const
{
// Testing mode, so always log.
if (m_testMode) return true;
// SG_OSG (OSG notify) - will always be displayed regardless of FG log settings as OSG log level is configured
// separately and thus it makes more sense to allow these message through.
if (p == SG_OSG) return true;
p = translatePriority(p);
if (p >= SG_INFO) return true;
return ((c & m_logClass) != 0 && p >= m_logPriority);
}
void log( sgDebugClass c, sgDebugPriority p,
const char* fileName, int line, const std::string& msg)
{
@@ -560,7 +548,6 @@ logstream::logstream()
logstream::~logstream()
{
popup_msgs.clear();
d->stop();
}
@@ -598,6 +585,10 @@ logstream::log( sgDebugClass c, sgDebugPriority p,
void logstream::hexdump(sgDebugClass c, sgDebugPriority p, const char* fileName, int line, const void *mem, unsigned int len, unsigned int columns)
{
if (((c & d->m_logClass) == 0) || (p < d->m_logPriority)) {
return;
}
unsigned int i, j;
char temp[3000], temp1[3000];
*temp = 0;
@@ -653,17 +644,17 @@ void logstream::hexdump(sgDebugClass c, sgDebugPriority p, const char* fileName,
void
logstream::popup( const std::string& msg)
{
popup_msgs.push_back(msg);
d->m_popupMessages.push_back(msg);
}
std::string
logstream::get_popup()
{
std::string rv = "";
if (!popup_msgs.empty())
if (!d->m_popupMessages.empty())
{
rv = popup_msgs.front();
popup_msgs.erase(popup_msgs.begin());
rv = d->m_popupMessages.front();
d->m_popupMessages.erase(d->m_popupMessages.begin());
}
return rv;
}
@@ -671,13 +662,7 @@ logstream::get_popup()
bool
logstream::has_popup()
{
return (popup_msgs.size() > 0) ? true : false;
}
bool
logstream::would_log( sgDebugClass c, sgDebugPriority p ) const
{
return d->would_log(c,p);
return !d->m_popupMessages.empty();
}
sgDebugClass