10 |
// http://www.fsf.org/licenses/gpl.html. |
// http://www.fsf.org/licenses/gpl.html. |
11 |
// |
// |
12 |
// $Log$ |
// $Log$ |
13 |
|
// Revision 1.3 2004/12/26 07:50:33 skunix |
14 |
|
// fixed Stream error, added a buffered Stream2 class, and added Level prefixing |
15 |
|
// |
16 |
// Revision 1.2 2004/12/26 02:59:35 Descender |
// Revision 1.2 2004/12/26 02:59:35 Descender |
17 |
|
// |
18 |
// log::Target: change access of destructor to protected |
// log::Target: change access of destructor to protected |
19 |
// log::Stream: change type of parameter 'server' for constructor to pointer, remove unused constructor |
// log::Stream: change type of parameter 'server' for constructor to pointer, remove unused constructor |
20 |
// |
// |
73 |
void |
void |
74 |
set_level(int level); |
set_level(int level); |
75 |
|
|
76 |
|
void |
77 |
|
set_prefix(int level, const std::string& prefix); |
78 |
|
|
79 |
void |
void |
80 |
log(int level, const std::string& message); |
log(int level, const std::string& message); |
81 |
|
|
122 |
{} |
{} |
123 |
}; |
}; |
124 |
|
|
125 |
|
|
126 |
|
class Stream2 |
127 |
|
{ |
128 |
|
public: |
129 |
|
Stream2(int level = Level::INFO, Server*pServer=&::usata::log::server) |
130 |
|
:m_server(pServer),m_level(level){}; |
131 |
|
void set_level(int level){m_level=level;} |
132 |
|
template <typename T> |
133 |
|
friend Stream2& |
134 |
|
operator << (Stream2& log, T data); |
135 |
|
void commit(); |
136 |
|
private: |
137 |
|
Server *m_server; |
138 |
|
int m_level; |
139 |
|
std::stringstream buf; |
140 |
|
}; |
141 |
class Stream |
class Stream |
142 |
{ |
{ |
143 |
public: |
public: |
144 |
|
|
145 |
Stream(Server *server, int level = Level::INFO) |
Stream(Server *server, int level = Level::INFO) |
146 |
: m_server(server) |
: m_server(server), m_level(level) |
147 |
{} |
{} |
148 |
|
|
149 |
~Stream() |
~Stream() |
157 |
|
|
158 |
template <typename T> |
template <typename T> |
159 |
friend Stream& |
friend Stream& |
160 |
operator << (Stream& log, T data) |
operator << (Stream& log, T data); |
|
{ |
|
|
log.m_server->log(log.m_level, boost::lexical_cast<std::string>(data)); |
|
|
} |
|
161 |
|
|
162 |
private: |
private: |
163 |
|
|
164 |
Server *m_server; |
Server *m_server; |
165 |
int m_level; |
int m_level; |
166 |
}; |
}; |
167 |
|
template <typename T> |
168 |
|
Stream& operator<<(Stream&log,T data) |
169 |
|
{ |
170 |
|
log.m_server->log(log.m_level, boost::lexical_cast<std::string>(data)); |
171 |
|
return log; |
172 |
|
} |
173 |
|
|
174 |
|
template <typename T> |
175 |
|
Stream2& operator<<(Stream2&log,T data) |
176 |
|
{ |
177 |
|
log.buf << data; |
178 |
|
return log; |
179 |
|
} |
180 |
|
|
181 |
// Stream manipulators |
// Stream manipulators |
182 |
|
|
183 |
struct StreamSetLevel { int level; }; |
struct StreamSetLevel { int level; }; |
184 |
|
struct EndLog{}; |
185 |
inline Stream& |
inline Stream& |
186 |
operator << (Stream& log, const StreamSetLevel& manip) |
operator << (Stream& log, const StreamSetLevel& manip) |
187 |
{ |
{ |
189 |
return log; |
return log; |
190 |
} |
} |
191 |
|
|
192 |
|
inline Stream2& |
193 |
|
operator << (Stream2& log, const StreamSetLevel&manip) |
194 |
|
{ |
195 |
|
log.set_level(manip.level); |
196 |
|
return log; |
197 |
|
} |
198 |
|
|
199 |
|
inline Stream2& |
200 |
|
operator << (Stream2&log, const EndLog&) |
201 |
|
{ |
202 |
|
log.commit(); |
203 |
|
return log; |
204 |
|
} |
205 |
|
|
206 |
StreamSetLevel set_level(int level); |
StreamSetLevel set_level(int level); |
207 |
|
|
208 |
} // namespace log |
} // namespace log |