You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
3.1 KiB

/*
* Copyright (C) 2016 Edward d'Auvergne
*
* This file is part of the program FlightGear.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _FG_TEST_SUITE_LOGGING_HXX
#define _FG_TEST_SUITE_LOGGING_HXX
#include <sstream>
#include <simgear/debug/LogCallback.hxx>
// A logstream callback based on the simgear FileLogCallback class.
class StreamLogCallback : public simgear::LogCallback
{
public:
StreamLogCallback(std::ostringstream& stream, sgDebugClass c, sgDebugPriority p, bool priorityMatch):
simgear::LogCallback(c, p),
m_priority(p),
m_stream(stream),
m_priorityMatch(priorityMatch)
{
}
virtual void operator()(sgDebugClass c, sgDebugPriority p, const char* file, int line, const std::string& message)
{
if (m_priorityMatch && p != m_priority) return;
if (!shouldLog(c, p)) return;
if (m_priorityMatch)
m_stream << simgear::LogCallback::debugClassToString(c) << ":" << file << ":" << line << ": " << message << std::endl;
else
m_stream << simgear::LogCallback::debugClassToString(c) << ":" << (int) p << ":" << file << ":" << line << ": " << message << std::endl;
}
private:
sgDebugPriority m_priority;
std::ostringstream &m_stream;
bool m_priorityMatch;
};
// All of the captured IO streams.
class capturedIO
{
public:
// Constructor and destructor.
capturedIO(sgDebugClass, sgDebugPriority);
~capturedIO();
// The IO streams.
std::ostringstream sg_interleaved;
std::ostringstream sg_bulk_only;
std::ostringstream sg_debug_only;
std::ostringstream sg_info_only;
std::ostringstream sg_warn_only;
std::ostringstream sg_alert_only;
// The callback objects.
StreamLogCallback *callback_interleaved;
StreamLogCallback *callback_bulk_only;
StreamLogCallback *callback_debug_only;
StreamLogCallback *callback_info_only;
StreamLogCallback *callback_warn_only;
StreamLogCallback *callback_alert_only;
// The logging class and priority text.
std::string log_class;
std::string log_priority;
};
// Return the global stream capture data structure, creating it if needed.
capturedIO & getIOstreams(sgDebugClass c=SG_ALL, sgDebugPriority p=SG_BULK);
// Set up to capture all the simgear logging priorities as separate streams.
void setupLogging(sgDebugClass, sgDebugPriority, bool);
// Deactivate all the simgear logging priority IO captures.
void stopLogging();
#endif // _FG_TEST_SUITE_LOGGING_HXX