101 lines
3.1 KiB
C++
101 lines
3.1 KiB
C++
|
|
||
|
/*
|
||
|
* 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
|