summaryrefslogtreecommitdiff
path: root/boost/log/sinks/debug_output_backend.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/log/sinks/debug_output_backend.hpp')
-rw-r--r--boost/log/sinks/debug_output_backend.hpp93
1 files changed, 93 insertions, 0 deletions
diff --git a/boost/log/sinks/debug_output_backend.hpp b/boost/log/sinks/debug_output_backend.hpp
new file mode 100644
index 0000000000..034390595a
--- /dev/null
+++ b/boost/log/sinks/debug_output_backend.hpp
@@ -0,0 +1,93 @@
+/*
+ * Copyright Andrey Semashev 2007 - 2014.
+ * Distributed under the Boost Software License, Version 1.0.
+ * (See accompanying file LICENSE_1_0.txt or copy at
+ * http://www.boost.org/LICENSE_1_0.txt)
+ */
+/*!
+ * \file debug_output_backend.hpp
+ * \author Andrey Semashev
+ * \date 07.11.2008
+ *
+ * The header contains a logging sink backend that outputs log records to the debugger.
+ */
+
+#ifndef BOOST_LOG_SINKS_DEBUG_OUTPUT_BACKEND_HPP_INCLUDED_
+#define BOOST_LOG_SINKS_DEBUG_OUTPUT_BACKEND_HPP_INCLUDED_
+
+#include <string>
+#include <boost/log/detail/config.hpp>
+
+#ifdef BOOST_HAS_PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifndef BOOST_LOG_WITHOUT_DEBUG_OUTPUT
+
+#include <boost/log/sinks/basic_sink_backend.hpp>
+#include <boost/log/sinks/frontend_requirements.hpp>
+#include <boost/log/attributes/attribute_value_set.hpp>
+#include <boost/log/core/record_view.hpp>
+#include <boost/log/detail/header.hpp>
+
+namespace boost {
+
+BOOST_LOG_OPEN_NAMESPACE
+
+namespace sinks {
+
+/*!
+ * \brief An implementation of a logging sink backend that outputs to the debugger
+ *
+ * The sink uses Windows API in order to write log records as debug messages, if the
+ * application process is run under debugger. The sink backend also provides a specific
+ * filter that allows to check whether the debugger is available and thus elide unnecessary
+ * formatting.
+ */
+template< typename CharT >
+class basic_debug_output_backend :
+ public basic_formatted_sink_backend< CharT, concurrent_feeding >
+{
+ //! Base type
+ typedef basic_formatted_sink_backend< CharT, concurrent_feeding > base_type;
+
+public:
+ //! Character type
+ typedef typename base_type::char_type char_type;
+ //! String type to be used as a message text holder
+ typedef typename base_type::string_type string_type;
+
+public:
+ /*!
+ * Constructor. Initializes the sink backend.
+ */
+ BOOST_LOG_API basic_debug_output_backend();
+ /*!
+ * Destructor
+ */
+ BOOST_LOG_API ~basic_debug_output_backend();
+
+ /*!
+ * The method passes the formatted message to debugger
+ */
+ BOOST_LOG_API void consume(record_view const& rec, string_type const& formatted_message);
+};
+
+#ifdef BOOST_LOG_USE_CHAR
+typedef basic_debug_output_backend< char > debug_output_backend; //!< Convenience typedef for narrow-character logging
+#endif
+#ifdef BOOST_LOG_USE_WCHAR_T
+typedef basic_debug_output_backend< wchar_t > wdebug_output_backend; //!< Convenience typedef for wide-character logging
+#endif
+
+} // namespace sinks
+
+BOOST_LOG_CLOSE_NAMESPACE // namespace log
+
+} // namespace boost
+
+#include <boost/log/detail/footer.hpp>
+
+#endif // BOOST_LOG_WITHOUT_DEBUG_OUTPUT
+
+#endif // BOOST_LOG_SINKS_DEBUG_OUTPUT_BACKEND_HPP_INCLUDED_