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