]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/log/sources/severity_channel_logger.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / log / sources / severity_channel_logger.hpp
1 /*
2 * Copyright Andrey Semashev 2007 - 2015.
3 * Distributed under the Boost Software License, Version 1.0.
4 * (See accompanying file LICENSE_1_0.txt or copy at
5 * http://www.boost.org/LICENSE_1_0.txt)
6 */
7 /*!
8 * \file severity_channel_logger.hpp
9 * \author Andrey Semashev
10 * \date 28.02.2008
11 *
12 * The header contains implementation of a logger with severity level and channel support.
13 */
14
15 #ifndef BOOST_LOG_SOURCES_SEVERITY_CHANNEL_LOGGER_HPP_INCLUDED_
16 #define BOOST_LOG_SOURCES_SEVERITY_CHANNEL_LOGGER_HPP_INCLUDED_
17
18 #include <string>
19 #include <boost/log/detail/config.hpp>
20 #if !defined(BOOST_LOG_NO_THREADS)
21 #include <boost/log/detail/light_rw_mutex.hpp>
22 #endif // !defined(BOOST_LOG_NO_THREADS)
23 #include <boost/log/sources/features.hpp>
24 #include <boost/log/sources/basic_logger.hpp>
25 #include <boost/log/sources/threading_models.hpp>
26 #include <boost/log/sources/severity_feature.hpp>
27 #include <boost/log/sources/channel_feature.hpp>
28 #include <boost/log/detail/header.hpp>
29
30 #ifdef BOOST_HAS_PRAGMA_ONCE
31 #pragma once
32 #endif
33
34 namespace boost {
35
36 BOOST_LOG_OPEN_NAMESPACE
37
38 namespace sources {
39
40 #ifndef BOOST_LOG_DOXYGEN_PASS
41
42 #ifdef BOOST_LOG_USE_CHAR
43
44 //! Narrow-char logger with severity level and channel support
45 template< typename LevelT = int, typename ChannelT = std::string >
46 class severity_channel_logger :
47 public basic_composite_logger<
48 char,
49 severity_channel_logger< LevelT, ChannelT >,
50 single_thread_model,
51 features<
52 severity< LevelT >,
53 channel< ChannelT >
54 >
55 >
56 {
57 BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(severity_channel_logger)
58 };
59
60 #if !defined(BOOST_LOG_NO_THREADS)
61
62 //! Narrow-char thread-safe logger with severity level and channel support
63 template< typename LevelT = int, typename ChannelT = std::string >
64 class severity_channel_logger_mt :
65 public basic_composite_logger<
66 char,
67 severity_channel_logger_mt< LevelT, ChannelT >,
68 multi_thread_model< boost::log::aux::light_rw_mutex >,
69 features<
70 severity< LevelT >,
71 channel< ChannelT >
72 >
73 >
74 {
75 BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(severity_channel_logger_mt)
76 };
77
78 #endif // !defined(BOOST_LOG_NO_THREADS)
79
80 #endif // BOOST_LOG_USE_CHAR
81
82 #ifdef BOOST_LOG_USE_WCHAR_T
83
84 //! Wide-char logger with severity level and channel support
85 template< typename LevelT = int, typename ChannelT = std::wstring >
86 class wseverity_channel_logger :
87 public basic_composite_logger<
88 wchar_t,
89 wseverity_channel_logger< LevelT, ChannelT >,
90 single_thread_model,
91 features<
92 severity< LevelT >,
93 channel< ChannelT >
94 >
95 >
96 {
97 BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(wseverity_channel_logger)
98 };
99
100 #if !defined(BOOST_LOG_NO_THREADS)
101
102 //! Wide-char thread-safe logger with severity level and channel support
103 template< typename LevelT = int, typename ChannelT = std::wstring >
104 class wseverity_channel_logger_mt :
105 public basic_composite_logger<
106 wchar_t,
107 wseverity_channel_logger_mt< LevelT, ChannelT >,
108 multi_thread_model< boost::log::aux::light_rw_mutex >,
109 features<
110 severity< LevelT >,
111 channel< ChannelT >
112 >
113 >
114 {
115 BOOST_LOG_FORWARD_LOGGER_MEMBERS_TEMPLATE(wseverity_channel_logger_mt)
116 };
117
118 #endif // !defined(BOOST_LOG_NO_THREADS)
119
120 #endif // BOOST_LOG_USE_WCHAR_T
121
122 #else // BOOST_LOG_DOXYGEN_PASS
123
124 /*!
125 * \brief Narrow-char logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger.
126 *
127 * See \c severity and \c channel class templates for a more detailed description
128 */
129 template< typename LevelT = int, typename ChannelT = std::string >
130 class severity_channel_logger :
131 public basic_composite_logger<
132 char,
133 severity_channel_logger< LevelT, ChannelT >,
134 single_thread_model,
135 features<
136 severity< LevelT >,
137 channel< ChannelT >
138 >
139 >
140 {
141 public:
142 /*!
143 * Default constructor
144 */
145 severity_channel_logger();
146 /*!
147 * Copy constructor
148 */
149 severity_channel_logger(severity_channel_logger const& that);
150 /*!
151 * Constructor with named arguments
152 */
153 template< typename... ArgsT >
154 explicit severity_channel_logger(ArgsT... const& args);
155 /*!
156 * Assignment operator
157 */
158 severity_channel_logger& operator= (severity_channel_logger const& that)
159 /*!
160 * Swaps two loggers
161 */
162 void swap(severity_channel_logger& that);
163 };
164
165 /*!
166 * \brief Narrow-char thread-safe logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger.
167 *
168 * See \c severity and \c channel class templates for a more detailed description
169 */
170 template< typename LevelT = int, typename ChannelT = std::string >
171 class severity_channel_logger_mt :
172 public basic_composite_logger<
173 char,
174 severity_channel_logger_mt< LevelT, ChannelT >,
175 multi_thread_model< implementation_defined >,
176 features<
177 severity< LevelT >,
178 channel< ChannelT >
179 >
180 >
181 {
182 public:
183 /*!
184 * Default constructor
185 */
186 severity_channel_logger_mt();
187 /*!
188 * Copy constructor
189 */
190 severity_channel_logger_mt(severity_channel_logger_mt const& that);
191 /*!
192 * Constructor with named arguments
193 */
194 template< typename... ArgsT >
195 explicit severity_channel_logger_mt(ArgsT... const& args);
196 /*!
197 * Assignment operator
198 */
199 severity_channel_logger_mt& operator= (severity_channel_logger_mt const& that)
200 /*!
201 * Swaps two loggers
202 */
203 void swap(severity_channel_logger_mt& that);
204 };
205
206 /*!
207 * \brief Wide-char logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger.
208 *
209 * See \c severity and \c channel class templates for a more detailed description
210 */
211 template< typename LevelT = int, typename ChannelT = std::wstring >
212 class wseverity_channel_logger :
213 public basic_composite_logger<
214 wchar_t,
215 wseverity_channel_logger< LevelT, ChannelT >,
216 single_thread_model,
217 features<
218 severity< LevelT >,
219 channel< ChannelT >
220 >
221 >
222 {
223 public:
224 /*!
225 * Default constructor
226 */
227 wseverity_channel_logger();
228 /*!
229 * Copy constructor
230 */
231 wseverity_channel_logger(wseverity_channel_logger const& that);
232 /*!
233 * Constructor with named arguments
234 */
235 template< typename... ArgsT >
236 explicit wseverity_channel_logger(ArgsT... const& args);
237 /*!
238 * Assignment operator
239 */
240 wseverity_channel_logger& operator= (wseverity_channel_logger const& that)
241 /*!
242 * Swaps two loggers
243 */
244 void swap(wseverity_channel_logger& that);
245 };
246
247 /*!
248 * \brief Wide-char thread-safe logger. Functionally equivalent to \c basic_severity_logger and \c basic_channel_logger.
249 *
250 * See \c severity and \c channel class templates for a more detailed description
251 */
252 template< typename LevelT = int, typename ChannelT = std::wstring >
253 class wseverity_channel_logger_mt :
254 public basic_composite_logger<
255 wchar_t,
256 wseverity_channel_logger_mt< LevelT, ChannelT >,
257 multi_thread_model< implementation_defined >,
258 features<
259 severity< LevelT >,
260 channel< ChannelT >
261 >
262 >
263 {
264 public:
265 /*!
266 * Default constructor
267 */
268 wseverity_channel_logger_mt();
269 /*!
270 * Copy constructor
271 */
272 wseverity_channel_logger_mt(wseverity_channel_logger_mt const& that);
273 /*!
274 * Constructor with named arguments
275 */
276 template< typename... ArgsT >
277 explicit wseverity_channel_logger_mt(ArgsT... const& args);
278 /*!
279 * Assignment operator
280 */
281 wseverity_channel_logger_mt& operator= (wseverity_channel_logger_mt const& that)
282 /*!
283 * Swaps two loggers
284 */
285 void swap(wseverity_channel_logger_mt& that);
286 };
287
288 #endif // BOOST_LOG_DOXYGEN_PASS
289
290 } // namespace sources
291
292 BOOST_LOG_CLOSE_NAMESPACE // namespace log
293
294 } // namespace boost
295
296 //! The macro allows to put a record with a specific channel name into log
297 #define BOOST_LOG_STREAM_CHANNEL_SEV(logger, chan, lvl)\
298 BOOST_LOG_STREAM_WITH_PARAMS((logger), (::boost::log::keywords::channel = (chan))(::boost::log::keywords::severity = (lvl)))
299
300 #ifndef BOOST_LOG_NO_SHORTHAND_NAMES
301
302 //! An equivalent to BOOST_LOG_STREAM_CHANNEL_SEV(logger, chan, lvl)
303 #define BOOST_LOG_CHANNEL_SEV(logger, chan, lvl) BOOST_LOG_STREAM_CHANNEL_SEV(logger, chan, lvl)
304
305 #endif // BOOST_LOG_NO_SHORTHAND_NAMES
306
307 #include <boost/log/detail/footer.hpp>
308
309 #endif // BOOST_LOG_SOURCES_SEVERITY_CHANNEL_LOGGER_HPP_INCLUDED_