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