Chris@16: /* Chris@101: * Copyright Andrey Semashev 2007 - 2015. Chris@16: * Distributed under the Boost Software License, Version 1.0. Chris@16: * (See accompanying file LICENSE_1_0.txt or copy at Chris@16: * http://www.boost.org/LICENSE_1_0.txt) Chris@16: */ Chris@16: /*! Chris@16: * \file severity_channel_logger.hpp Chris@16: * \author Andrey Semashev Chris@16: * \date 28.02.2008 Chris@16: * Chris@16: * The header contains implementation of a logger with severity level and channel support. Chris@16: */ Chris@16: Chris@16: #ifndef BOOST_LOG_SOURCES_SEVERITY_CHANNEL_LOGGER_HPP_INCLUDED_ Chris@16: #define BOOST_LOG_SOURCES_SEVERITY_CHANNEL_LOGGER_HPP_INCLUDED_ Chris@16: Chris@16: #include Chris@16: #include Chris@16: #if !defined(BOOST_LOG_NO_THREADS) Chris@16: #include Chris@16: #endif // !defined(BOOST_LOG_NO_THREADS) Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: #ifdef BOOST_HAS_PRAGMA_ONCE Chris@16: #pragma once Chris@16: #endif Chris@16: Chris@16: namespace boost { Chris@16: Chris@16: BOOST_LOG_OPEN_NAMESPACE Chris@16: Chris@16: namespace sources { Chris@16: Chris@16: #ifndef BOOST_LOG_DOXYGEN_PASS Chris@16: Chris@16: #ifdef BOOST_LOG_USE_CHAR Chris@16: Chris@16: //! Narrow-char logger with severity level and channel support Chris@16: template< typename LevelT = int, typename ChannelT = std::string > Chris@16: class severity_channel_logger : Chris@16: public basic_composite_logger< Chris@16: char, Chris@16: severity_channel_logger< LevelT, ChannelT >, Chris@16: single_thread_model, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(severity_channel_logger) Chris@16: }; Chris@16: Chris@16: #if !defined(BOOST_LOG_NO_THREADS) Chris@16: Chris@16: //! Narrow-char thread-safe logger with severity level and channel support Chris@16: template< typename LevelT = int, typename ChannelT = std::string > Chris@16: class severity_channel_logger_mt : Chris@16: public basic_composite_logger< Chris@16: char, Chris@16: severity_channel_logger_mt< LevelT, ChannelT >, Chris@16: multi_thread_model< boost::log::aux::light_rw_mutex >, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(severity_channel_logger_mt) Chris@16: }; Chris@16: Chris@16: #endif // !defined(BOOST_LOG_NO_THREADS) Chris@16: Chris@16: #endif // BOOST_LOG_USE_CHAR Chris@16: Chris@16: #ifdef BOOST_LOG_USE_WCHAR_T Chris@16: Chris@16: //! Wide-char logger with severity level and channel support Chris@16: template< typename LevelT = int, typename ChannelT = std::wstring > Chris@16: class wseverity_channel_logger : Chris@16: public basic_composite_logger< Chris@16: wchar_t, Chris@16: wseverity_channel_logger< LevelT, ChannelT >, Chris@16: single_thread_model, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(wseverity_channel_logger) Chris@16: }; Chris@16: Chris@16: #if !defined(BOOST_LOG_NO_THREADS) Chris@16: Chris@16: //! Wide-char thread-safe logger with severity level and channel support Chris@16: template< typename LevelT = int, typename ChannelT = std::wstring > Chris@16: class wseverity_channel_logger_mt : Chris@16: public basic_composite_logger< Chris@16: wchar_t, Chris@16: wseverity_channel_logger_mt< LevelT, ChannelT >, Chris@16: multi_thread_model< boost::log::aux::light_rw_mutex >, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(wseverity_channel_logger_mt) Chris@16: }; Chris@16: Chris@16: #endif // !defined(BOOST_LOG_NO_THREADS) Chris@16: Chris@16: #endif // BOOST_LOG_USE_WCHAR_T Chris@16: Chris@16: #else // BOOST_LOG_DOXYGEN_PASS Chris@16: Chris@16: /*! Chris@16: * \brief Narrow-char logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger. Chris@16: * Chris@16: * See \c severity and \c channel class templates for a more detailed description Chris@16: */ Chris@16: template< typename LevelT = int, typename ChannelT = std::string > Chris@16: class severity_channel_logger : Chris@16: public basic_composite_logger< Chris@16: char, Chris@16: severity_channel_logger< LevelT, ChannelT >, Chris@16: single_thread_model, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: public: Chris@16: /*! Chris@16: * Default constructor Chris@16: */ Chris@16: severity_channel_logger(); Chris@16: /*! Chris@16: * Copy constructor Chris@16: */ Chris@16: severity_channel_logger(severity_channel_logger const& that); Chris@16: /*! Chris@16: * Constructor with named arguments Chris@16: */ Chris@16: template< typename... ArgsT > Chris@16: explicit severity_channel_logger(ArgsT... const& args); Chris@16: /*! Chris@16: * Assignment operator Chris@16: */ Chris@16: severity_channel_logger& operator= (severity_channel_logger const& that) Chris@16: /*! Chris@16: * Swaps two loggers Chris@16: */ Chris@16: void swap(severity_channel_logger& that); Chris@16: }; Chris@16: Chris@16: /*! Chris@16: * \brief Narrow-char thread-safe logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger. Chris@16: * Chris@16: * See \c severity and \c channel class templates for a more detailed description Chris@16: */ Chris@16: template< typename LevelT = int, typename ChannelT = std::string > Chris@16: class severity_channel_logger_mt : Chris@16: public basic_composite_logger< Chris@16: char, Chris@16: severity_channel_logger_mt< LevelT, ChannelT >, Chris@16: multi_thread_model< implementation_defined >, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: public: Chris@16: /*! Chris@16: * Default constructor Chris@16: */ Chris@16: severity_channel_logger_mt(); Chris@16: /*! Chris@16: * Copy constructor Chris@16: */ Chris@16: severity_channel_logger_mt(severity_channel_logger_mt const& that); Chris@16: /*! Chris@16: * Constructor with named arguments Chris@16: */ Chris@16: template< typename... ArgsT > Chris@16: explicit severity_channel_logger_mt(ArgsT... const& args); Chris@16: /*! Chris@16: * Assignment operator Chris@16: */ Chris@16: severity_channel_logger_mt& operator= (severity_channel_logger_mt const& that) Chris@16: /*! Chris@16: * Swaps two loggers Chris@16: */ Chris@16: void swap(severity_channel_logger_mt& that); Chris@16: }; Chris@16: Chris@16: /*! Chris@16: * \brief Wide-char logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger. Chris@16: * Chris@16: * See \c severity and \c channel class templates for a more detailed description Chris@16: */ Chris@16: template< typename LevelT = int, typename ChannelT = std::wstring > Chris@16: class wseverity_channel_logger : Chris@16: public basic_composite_logger< Chris@16: wchar_t, Chris@16: wseverity_channel_logger< LevelT, ChannelT >, Chris@16: single_thread_model, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: public: Chris@16: /*! Chris@16: * Default constructor Chris@16: */ Chris@16: wseverity_channel_logger(); Chris@16: /*! Chris@16: * Copy constructor Chris@16: */ Chris@16: wseverity_channel_logger(wseverity_channel_logger const& that); Chris@16: /*! Chris@16: * Constructor with named arguments Chris@16: */ Chris@16: template< typename... ArgsT > Chris@16: explicit wseverity_channel_logger(ArgsT... const& args); Chris@16: /*! Chris@16: * Assignment operator Chris@16: */ Chris@16: wseverity_channel_logger& operator= (wseverity_channel_logger const& that) Chris@16: /*! Chris@16: * Swaps two loggers Chris@16: */ Chris@16: void swap(wseverity_channel_logger& that); Chris@16: }; Chris@16: Chris@16: /*! Chris@16: * \brief Wide-char thread-safe logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger. Chris@16: * Chris@16: * See \c severity and \c channel class templates for a more detailed description Chris@16: */ Chris@16: template< typename LevelT = int, typename ChannelT = std::wstring > Chris@16: class wseverity_channel_logger_mt : Chris@16: public basic_composite_logger< Chris@16: wchar_t, Chris@16: wseverity_channel_logger_mt< LevelT, ChannelT >, Chris@16: multi_thread_model< implementation_defined >, Chris@16: features< Chris@16: severity< LevelT >, Chris@16: channel< ChannelT > Chris@16: > Chris@16: > Chris@16: { Chris@16: public: Chris@16: /*! Chris@16: * Default constructor Chris@16: */ Chris@16: wseverity_channel_logger_mt(); Chris@16: /*! Chris@16: * Copy constructor Chris@16: */ Chris@16: wseverity_channel_logger_mt(wseverity_channel_logger_mt const& that); Chris@16: /*! Chris@16: * Constructor with named arguments Chris@16: */ Chris@16: template< typename... ArgsT > Chris@16: explicit wseverity_channel_logger_mt(ArgsT... const& args); Chris@16: /*! Chris@16: * Assignment operator Chris@16: */ Chris@16: wseverity_channel_logger_mt& operator= (wseverity_channel_logger_mt const& that) Chris@16: /*! Chris@16: * Swaps two loggers Chris@16: */ Chris@16: void swap(wseverity_channel_logger_mt& that); Chris@16: }; Chris@16: Chris@16: #endif // BOOST_LOG_DOXYGEN_PASS Chris@16: Chris@16: } // namespace sources Chris@16: Chris@16: BOOST_LOG_CLOSE_NAMESPACE // namespace log Chris@16: Chris@16: } // namespace boost Chris@16: Chris@16: //! The macro allows to put a record with a specific channel name into log Chris@16: #define BOOST_LOG_STREAM_CHANNEL_SEV(logger, chan, lvl)\ Chris@16: BOOST_LOG_STREAM_WITH_PARAMS((logger), (::boost::log::keywords::channel = (chan))(::boost::log::keywords::severity = (lvl))) Chris@16: Chris@16: #ifndef BOOST_LOG_NO_SHORTHAND_NAMES Chris@16: Chris@16: //! An equivalent to BOOST_LOG_STREAM_CHANNEL_SEV(logger, chan, lvl) Chris@16: #define BOOST_LOG_CHANNEL_SEV(logger, chan, lvl) BOOST_LOG_STREAM_CHANNEL_SEV(logger, chan, lvl) Chris@16: Chris@16: #endif // BOOST_LOG_NO_SHORTHAND_NAMES Chris@16: Chris@16: #include Chris@16: Chris@16: #endif // BOOST_LOG_SOURCES_SEVERITY_CHANNEL_LOGGER_HPP_INCLUDED_