BALL
1.4.2
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
include
BALL
COMMON
logStream.h
Go to the documentation of this file.
1
// -*- Mode: C++; tab-width: 2; -*-
2
// vi: set ts=2:
3
//
4
5
#ifndef BALL_COMMON_LOGSTREAM_H
6
#define BALL_COMMON_LOGSTREAM_H
7
8
#ifndef BALL_CONFIG_CONFIG_H
9
# include <BALL/CONFIG/config.h>
10
#endif
11
12
#ifndef BALL_COMMON_GLOBAL_H
13
# include <
BALL/COMMON/global.h
>
14
#endif
15
16
#ifndef BALL_COMMON_DEBUG_H
17
# include <
BALL/COMMON/debug.h
>
18
#endif
19
20
#ifdef BALL_HAS_SYS_TIME_H
21
# include <sys/time.h>
22
#endif
23
24
#ifdef BALL_HAS_TIME_H
25
# include <time.h>
26
#endif
27
28
#ifdef BALL_HAS_SSTREAM
29
# include <sstream>
30
#else
31
# include <strstream>
32
#endif
33
34
#include <iostream>
35
#include <list>
36
#include <vector>
37
#include <string>
38
39
40
using
std::list;
41
using
std::vector;
42
using
std::string;
43
44
namespace
BALL
45
{
46
71
72
// forward declarations
73
class
LogStream;
74
class
LogStreamNotifier;
75
95
class
BALL_EXPORT
LogStreamBuf
96
:
public
std::streambuf
97
{
98
99
friend
class
LogStream
;
100
101
public
:
102
106
static
const
int
MAX_LEVEL
;
107
static
const
int
MIN_LEVEL
;
108
static
const
Time
MAX_TIME
;
110
114
118
LogStreamBuf
();
119
123
virtual
~
LogStreamBuf
();
124
126
127
131
136
virtual
void
dump(std::ostream& s);
137
139
143
154
virtual
int
sync();
155
156
int
sync(
bool
force_flush);
157
162
virtual
int
overflow(
int
c
= -1);
164
165
BALL_EXPORT
struct
StreamStruct
166
{
167
std::ostream*
stream
;
168
string
prefix
;
169
int
min_level
;
170
int
max_level
;
171
LogStreamNotifier
*
target
;
172
bool
disabled
;
173
174
StreamStruct
()
175
: stream(0),
176
min_level(MIN_LEVEL),
177
max_level(MAX_LEVEL),
178
target(0)
179
{
180
}
181
182
// Delete the notification target.
183
~
StreamStruct
()
184
{
185
}
186
};
187
188
189
protected
:
190
191
struct
LoglineStruct
192
{
193
int
level
;
194
string
text
;
195
Time
time
;
196
197
LoglineStruct
()
198
: level(0),
199
text(
""
),
200
time(0)
201
{}
202
};
203
204
typedef
struct
LoglineStruct
Logline
;
205
206
207
// interpret the prefix format string and return the expanded prefix
208
string
expandPrefix_(
const
string
& prefix,
int
level,
Time
time)
const
;
209
210
char
*
pbuf_
;
211
212
vector<Logline>
loglines_
;
213
214
int
level_
;
215
216
int
tmp_level_
;
217
218
list<StreamStruct>
stream_list_
;
219
220
string
incomplete_line_
;
221
};
222
223
225
class
BALL_EXPORT
LogStreamNotifier
226
{
227
public
:
228
230
LogStreamNotifier
();
231
233
virtual
~
LogStreamNotifier
();
234
236
virtual
void
logNotify();
237
239
void
registerAt(
LogStream
& log_stream,
240
int
min_level =
LogStreamBuf::MIN_LEVEL
,
241
int
max_level =
LogStreamBuf::MAX_LEVEL
);
243
void
unregister();
244
245
protected
:
246
247
std::stringstream
stream_
;
248
249
LogStream
*
registered_at_
;
250
};
251
252
253
259
class
BALL_EXPORT
LogStream
260
:
public
std::ostream
261
{
262
public
:
263
264
268
276
enum
LogStreamLevel
277
{
281
ERROR_LEVEL = 2000 ,
282
285
WARNING_LEVEL = 1000,
288
INFORMATION_LEVEL = 0
289
};
290
292
296
307
LogStream
(
LogStreamBuf
* buf = 0,
bool
delete_buf =
true
,
bool
associate_stdio =
false
);
308
312
virtual
~
LogStream
();
313
315
319
323
LogStreamBuf
* rdbuf();
324
327
LogStreamBuf
* operator -> ();
329
333
340
void
setLevel(
int
level);
341
349
int
getLevel();
350
364
LogStream
& level(
int
level);
365
370
LogStream
& info(
int
n = 0);
371
376
LogStream
& error(
int
n = 0);
377
382
LogStream
& warn(
int
n = 0);
383
385
389
404
void
insert
405
(std::ostream& s,
int
min_level =
LogStreamBuf::MIN_LEVEL
,
406
int
max_level =
LogStreamBuf::MAX_LEVEL
);
407
415
void
remove
(std::ostream& s);
416
419
void
insertNotification(std::ostream& s,
420
LogStreamNotifier
& target,
421
int
min_level =
LogStreamBuf::MIN_LEVEL
,
422
int
max_level =
LogStreamBuf::MAX_LEVEL
);
423
431
void
setMinLevel(
const
std::ostream& s,
int
min_level);
432
440
void
setMaxLevel(
const
std::ostream& s,
int
max_level);
441
460
void
setPrefix(
const
std::ostream& s,
const
string
& prefix);
461
463
void
disableOutput() ;
464
466
void
enableOutput() ;
467
469
bool
outputEnabled()
const
470
;
471
474
std::ostream& flush();
475
477
480
485
void
clear();
486
496
Size
getNumberOfLines
497
(
int
min_level =
LogStreamBuf::MIN_LEVEL
,
498
int
max_level =
LogStreamBuf::MAX_LEVEL
)
const
;
499
506
string
getLineText(
const
Index
& index)
const
;
507
512
Time
getLineTime(
const
Index
& index)
const
;
513
519
int
getLineLevel(
const
Index
& index)
const
;
520
529
list<int> filterLines
530
(
int
min_level =
LogStreamBuf::MIN_LEVEL
,
int
max_level =
LogStreamBuf::MAX_LEVEL
,
531
Time
earliest = 0,
Time
latest =
LogStreamBuf::MAX_TIME
,
532
const
string
& s =
""
)
const
;
534
535
private
:
536
537
typedef
std::list<LogStreamBuf::StreamStruct>::iterator
StreamIterator
;
538
539
StreamIterator
findStream_(
const
std::ostream& stream);
540
bool
hasStream_(std::ostream& stream);
541
bool
bound_()
const
;
542
543
// flag needed by the destructor to decide whether the streambuf
544
// has to be deleted. If the default ctor is used to create
545
// the LogStreamBuf, delete_buffer_ is set to true and the ctor
546
// also deletes the buffer.
547
bool
delete_buffer_
;
548
bool
disable_output_
;
549
};
550
551
556
BALL_EXPORT
extern
LogStream
Log
;
557
559
560
# ifndef BALL_NO_INLINE_FUNCTIONS
561
# include <BALL/COMMON/logStream.iC>
562
# endif
563
564
}
// namespace BALL
565
566
#endif // BALL_COMMON_LOGSTREAM_H
Generated by
1.8.3.1