diff options
Diffstat (limited to 'lib/base/streamlogger.hpp')
-rw-r--r-- | lib/base/streamlogger.hpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/lib/base/streamlogger.hpp b/lib/base/streamlogger.hpp new file mode 100644 index 0000000..8cbe313 --- /dev/null +++ b/lib/base/streamlogger.hpp @@ -0,0 +1,47 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef STREAMLOGGER_H +#define STREAMLOGGER_H + +#include "base/i2-base.hpp" +#include "base/streamlogger-ti.hpp" +#include "base/timer.hpp" +#include <iosfwd> + +namespace icinga +{ + +/** + * A logger that logs to an iostream. + * + * @ingroup base + */ +class StreamLogger : public ObjectImpl<StreamLogger> +{ +public: + DECLARE_OBJECT(StreamLogger); + + void Stop(bool runtimeRemoved) override; + ~StreamLogger() override; + + void BindStream(std::ostream *stream, bool ownsStream); + + static void ProcessLogEntry(std::ostream& stream, const LogEntry& entry); + +protected: + void ProcessLogEntry(const LogEntry& entry) final; + void Flush() final; + +private: + static std::mutex m_Mutex; + std::ostream *m_Stream{nullptr}; + bool m_OwnsStream{false}; + + Timer::Ptr m_FlushLogTimer; + + void FlushLogTimerHandler(); +}; + +} + +#endif /* STREAMLOGGER_H */ |