forked from openpreserve/scape-xcorrsound
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogstream.cpp
More file actions
104 lines (87 loc) · 1.92 KB
/
logstream.cpp
File metadata and controls
104 lines (87 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "logstream.h"
#include <stdint.h>
#include <iostream>
#include <cstdio>
using namespace std;
/**
* logstream buffer start
*/
logstreambuffer::logstreambuffer(int32_t _level, const char *filename) {
setp(buf, buf+buf_sz);
this->print_level = _level;
logfile = fopen(filename, "a");
}
logstreambuffer::~logstreambuffer() {
flush();
sync();
fclose(logfile);
}
void logstreambuffer::flush() {
if (this->print_level >= this->level) {
fwrite(buf, sizeof(char), pptr()-buf, logfile);
}
setp(buf, buf+buf_sz);
}
int logstreambuffer::overflow(int c) {
flush();
*pptr() = c;
pbump(1);
return 0;
}
int logstreambuffer::sync() {
flush();
return 0;
}
void logstreambuffer::set_level(int32_t level) {
if (this->level == level) return;
sync();
this->level = level;
}
/**
* logstream start
*/
void logstream::set_level(int32_t n) {
buffer.set_level(n);
}
void logstream::set_print_level(int32_t n) {
buffer.print_level = n;
}
/**
* logging manipulators
*/
log_level log_debug() {
return log_level(logstream::DEBUG);
}
log_level log_information() {
return log_level(logstream::INFORMATION);
}
log_level log_fatal() {
return log_level(logstream::FATAL);
}
log_level log_error() {
return log_level(logstream::ERROR);
}
log_level log_warning() {
return log_level(logstream::WARNING);
}
logstream& operator<<(logstream &ls, log_level ll) {
ls.set_level(ll.n);
switch (ll.n) {
case logstream::DEBUG:
ls << std::endl << " --- DEBUG --- " << std::endl;
break;
case logstream::INFORMATION:
ls << std::endl << " --- INFORMATIONAL ---" << std::endl;
break;
case logstream::FATAL:
ls << std::endl << " --- FATAL ---" << std::endl;
break;
case logstream::ERROR:
ls << std::endl << " --- ERROR ---" << std::endl;
break;
case logstream::WARNING:
ls << std::endl << " --- WARNING ---" << std::endl;
break;
}
return ls;
}