Tapkee
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
logging.hpp
Go to the documentation of this file.
1
/* This software is distributed under BSD 3-clause license (see LICENSE file).
2
*
3
* Copyright (c) 2012-2013 Sergey Lisitsyn
4
*/
5
6
#ifndef TAPKEE_LOGGING_H_
7
#define TAPKEE_LOGGING_H_
8
9
#include <iostream>
10
#include <string>
11
12
#define LEVEL_ENABLED_FIELD(X) bool X##_enabled
13
#define LEVEL_ENABLED_FIELD_INITIALIZER(X,value) X##_enabled(value)
14
#define LEVEL_HANDLERS(LEVEL) \
15
void enable_##LEVEL() { LEVEL##_enabled = true; }; \
16
void disable_##LEVEL() { LEVEL##_enabled = false; }; \
17
bool is_##LEVEL##_enabled() { return LEVEL##_enabled; };\
18
void message_##LEVEL(const std::string& msg) \
19
{ \
20
if (LEVEL##_enabled) \
21
impl->message_##LEVEL(msg); \
22
}
23
#define LEVEL_HANDLERS_DECLARATION(LEVEL) \
24
virtual void message_##LEVEL(const std::string& msg) = 0
25
#define LEVEL_HANDLERS_DEFAULT_IMPL(LEVEL) \
26
virtual void message_##LEVEL(const std::string& msg) \
27
{ \
28
if (os_ && os_->good()) \
29
(*os_) << "["#LEVEL"] " << msg << "\n"; \
30
}
31
32
namespace
tapkee
33
{
34
36
class
LoggerImplementation
37
{
38
public
:
39
LoggerImplementation
() {};
40
virtual
~LoggerImplementation
() {};
41
LEVEL_HANDLERS_DECLARATION
(info);
42
LEVEL_HANDLERS_DECLARATION
(warning);
43
LEVEL_HANDLERS_DECLARATION
(debug);
44
LEVEL_HANDLERS_DECLARATION
(error);
45
LEVEL_HANDLERS_DECLARATION
(benchmark);
46
private
:
47
LoggerImplementation
&
operator=
(
const
LoggerImplementation
&);
48
LoggerImplementation
(
const
LoggerImplementation
&);
49
};
50
52
class
DefaultLoggerImplementation
:
public
LoggerImplementation
53
{
54
public
:
55
DefaultLoggerImplementation
() :
os_
(&std::cout) {}
56
virtual
~DefaultLoggerImplementation
() {}
57
LEVEL_HANDLERS_DEFAULT_IMPL
(info);
58
LEVEL_HANDLERS_DEFAULT_IMPL
(warning);
59
LEVEL_HANDLERS_DEFAULT_IMPL
(debug);
60
LEVEL_HANDLERS_DEFAULT_IMPL
(error);
61
LEVEL_HANDLERS_DEFAULT_IMPL
(benchmark)
62
private:
63
DefaultLoggerImplementation
& operator=(const
DefaultLoggerImplementation
&);
64
DefaultLoggerImplementation(const DefaultLoggerImplementation&);
65
66
std::ostream*
os_
;
67
};
68
72
class
LoggingSingleton
73
{
74
private
:
75
LoggingSingleton() : impl(new DefaultLoggerImplementation),
76
LEVEL_ENABLED_FIELD_INITIALIZER
(info,false),
77
LEVEL_ENABLED_FIELD_INITIALIZER
(warning,true),
78
LEVEL_ENABLED_FIELD_INITIALIZER
(debug,false),
79
LEVEL_ENABLED_FIELD_INITIALIZER
(error,true),
80
LEVEL_ENABLED_FIELD_INITIALIZER
(benchmark,false)
81
{
82
};
83
~LoggingSingleton()
84
{
85
delete
impl;
86
}
87
LoggingSingleton(
const
LoggingSingleton& ls);
88
void
operator=
(
const
LoggingSingleton& ls);
89
90
LoggerImplementation
*
impl
;
91
92
LEVEL_ENABLED_FIELD
(info);
93
LEVEL_ENABLED_FIELD
(warning);
94
LEVEL_ENABLED_FIELD
(debug);
95
LEVEL_ENABLED_FIELD
(error);
96
LEVEL_ENABLED_FIELD
(benchmark);
97
98
public
:
100
static
LoggingSingleton& instance()
101
{
102
static
LoggingSingleton s;
103
return
s;
104
}
105
108
LoggerImplementation
*
get_logger_impl
()
const
{
return
impl; }
111
void
set_logger_impl
(
LoggerImplementation
* i) {
delete
impl; impl = i; }
112
113
LEVEL_HANDLERS
(info);
114
LEVEL_HANDLERS
(warning);
115
LEVEL_HANDLERS
(debug);
116
LEVEL_HANDLERS
(error);
117
LEVEL_HANDLERS
(benchmark);
118
119
};
120
121
#undef LEVEL_HANDLERS
122
#undef LEVEL_HANDLERS_DECLARATION
123
#undef LEVEL_HANDLERS_DEFAULT_IMPL
124
#undef LEVEL_ENABLED_FIELD
125
#undef LEVEL_ENABLED_FIELD_INITIALIZER
126
}
127
128
#endif
include
tapkee
utils
logging.hpp
Generated by
1.8.3.1