This changes the design of the LogBackend class and its subclasses, now the main virtual method is addTaggedMessage(). The former virtual method addMessage() is now a regular non-virtual method forwarding to addTaggedMessage(). You can configure message limiting based on tags by passing a MessageLimiter to the configureMessageLimiter() method, which will then be used by the includeMessage() method. That method now takes an additional tag argument. The most user-visible part of this is that there are new overloads of the static methods OpmLog::warning(), OpmLog::error() etc, that take message tags. To tie things together the OpmLog and Logger classes have also gotten new addTaggedMessage() methods, but they should mostly be used through the convenience methods such as OpmLog::warning().
84 lines
2.8 KiB
C++
84 lines
2.8 KiB
C++
/*
|
|
Copyright 2015 Statoil ASA.
|
|
|
|
This file is part of the Open Porous Media project (OPM).
|
|
|
|
OPM 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 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
OPM 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 OPM. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
|
|
#ifndef OPM_LOGBACKEND_HPP
|
|
#define OPM_LOGBACKEND_HPP
|
|
|
|
#include <opm/common/OpmLog/MessageFormatter.hpp>
|
|
#include <opm/common/OpmLog/MessageLimiter.hpp>
|
|
#include <cstdint>
|
|
#include <string>
|
|
#include <memory>
|
|
|
|
namespace Opm
|
|
{
|
|
|
|
/// Abstract interface class for log backends.
|
|
class LogBackend
|
|
{
|
|
public:
|
|
/// Construct with given message mask.
|
|
explicit LogBackend(int64_t mask);
|
|
|
|
/// Virtual destructor to enable inheritance.
|
|
virtual ~LogBackend();
|
|
|
|
/// Configure how decorateMessage() will modify message strings.
|
|
void configureDecoration(std::shared_ptr<MessageFormatterInterface> formatter);
|
|
|
|
/// Configure how message tags will be used to limit messages.
|
|
void configureMessageLimiter(std::shared_ptr<MessageLimiter> limiter);
|
|
|
|
/// Add a message to the backend.
|
|
///
|
|
/// Typically a subclass may filter, change, and output
|
|
/// messages based on configuration and the messageFlag.
|
|
void addMessage(int64_t messageFlag, const std::string& message);
|
|
|
|
/// Add a tagged message to the backend.
|
|
///
|
|
/// Typically a subclass may filter, change, and output
|
|
/// messages based on configuration and the messageFlag.
|
|
virtual void addTaggedMessage(int64_t messageFlag,
|
|
const std::string& messageTag,
|
|
const std::string& message) = 0;
|
|
|
|
/// The message mask types are specified in the
|
|
/// Opm::Log::MessageType namespace, in file LogUtils.hpp.
|
|
int64_t getMask() const;
|
|
|
|
protected:
|
|
/// Return true if all bits of messageFlag are also set in our mask.
|
|
bool includeMessage(int64_t messageFlag, const std::string& messageTag);
|
|
|
|
/// Return decorated version of message depending on configureDecoration() arguments.
|
|
std::string decorateMessage(int64_t messageFlag, const std::string& message);
|
|
|
|
private:
|
|
int64_t m_mask;
|
|
std::shared_ptr<MessageFormatterInterface> m_formatter;
|
|
std::shared_ptr<MessageLimiter> m_limiter;
|
|
};
|
|
|
|
} // namespace LogBackend
|
|
|
|
|
|
#endif
|