/* * 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 . */ #ifndef _FG_TEST_SUITE_LOGGING_HXX #define _FG_TEST_SUITE_LOGGING_HXX #include #include // 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