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