From 44ed218f0b219392a9e89647840c5a61c40858de Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Wed, 9 Apr 2014 22:15:31 +0000 Subject: Add a capturing logger. Useful in testing whether code logs the expected messages or not. --- lib/common/Logging.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) (limited to 'lib') diff --git a/lib/common/Logging.h b/lib/common/Logging.h index a0746c69..d74ded61 100644 --- a/lib/common/Logging.h +++ b/lib/common/Logging.h @@ -281,6 +281,58 @@ class Syslog : public Logger static int GetNamedFacility(const std::string& rFacility); }; +// -------------------------------------------------------------------------- +// +// Class +// Name: Capture +// Purpose: Keeps log messages for analysis in tests. +// Created: 2014/03/08 +// +// -------------------------------------------------------------------------- + +class Capture : public Logger +{ + public: + struct Message + { + Log::Level level; + std::string file; + int line; + std::string message; + }; + + private: + std::vector mMessages; + + public: + virtual ~Capture() { } + + virtual bool Log(Log::Level level, const std::string& rFile, + int line, std::string& rMessage) + { + Message message; + message.level = level; + message.file = rFile; + message.line = line; + message.message = rMessage; + mMessages.push_back(message); + return true; + } + virtual const char* GetType() { return "Capture"; } + virtual void SetProgramName(const std::string& rProgramName) { } + const std::vector& GetMessages() const { return mMessages; } + std::string GetString() const + { + std::ostringstream oss; + for (std::vector::const_iterator i = mMessages.begin(); + i != mMessages.end(); i++) + { + oss << i->message << "\n"; + } + return oss.str(); + } +}; + // -------------------------------------------------------------------------- // // Class -- cgit v1.2.3