-
Notifications
You must be signed in to change notification settings - Fork 233
Expand file tree
/
Copy pathccapi_logger.h
More file actions
170 lines (153 loc) · 9.52 KB
/
ccapi_logger.h
File metadata and controls
170 lines (153 loc) · 9.52 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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
#pragma once
#ifdef _WIN32
#define CCAPI_LOGGER_FILE_SEPARATOR '\\'
#else
#define CCAPI_LOGGER_FILE_SEPARATOR '/'
#endif
#define CCAPI_LOGGER_FILE_NAME (strrchr(__FILE__, CCAPI_LOGGER_FILE_SEPARATOR) ? strrchr(__FILE__, CCAPI_LOGGER_FILE_SEPARATOR) + 1 : __FILE__)
#define CCAPI_LOGGER_LINE_NUMBER std::to_string(__LINE__)
#define CCAPI_LOGGER_THREAD_ID std::this_thread::get_id()
#define CCAPI_LOGGER_NOW std::chrono::system_clock::now()
#if defined(CCAPI_ENABLE_LOG_FATAL) || defined(CCAPI_ENABLE_LOG_ERROR) || defined(CCAPI_ENABLE_LOG_WARN) || defined(CCAPI_ENABLE_LOG_INFO) || \
defined(CCAPI_ENABLE_LOG_DETAIL) || defined(CCAPI_ENABLE_LOG_FINE) || defined(CCAPI_ENABLE_LOG_DEBUG) || defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_FATAL(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->fatal(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
throw std::runtime_error(message); \
}
#else
#define CCAPI_LOGGER_FATAL(message) throw std::runtime_error(message)
#endif
#if defined(CCAPI_ENABLE_LOG_ERROR) || defined(CCAPI_ENABLE_LOG_WARN) || defined(CCAPI_ENABLE_LOG_INFO) || defined(CCAPI_ENABLE_LOG_DETAIL) || \
defined(CCAPI_ENABLE_LOG_FINE) || defined(CCAPI_ENABLE_LOG_DEBUG) || defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_ERROR(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->error(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_ERROR(message)
#endif
#if defined(CCAPI_ENABLE_LOG_WARN) || defined(CCAPI_ENABLE_LOG_INFO) || defined(CCAPI_ENABLE_LOG_DETAIL) || defined(CCAPI_ENABLE_LOG_FINE) || \
defined(CCAPI_ENABLE_LOG_DEBUG) || defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_WARN(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->warn(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_WARN(message)
#endif
#if defined(CCAPI_ENABLE_LOG_INFO) || defined(CCAPI_ENABLE_LOG_DETAIL) || defined(CCAPI_ENABLE_LOG_FINE) || defined(CCAPI_ENABLE_LOG_DEBUG) || \
defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_INFO(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->info(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_INFO(message)
#endif
#if defined(CCAPI_ENABLE_LOG_DETAIL) || defined(CCAPI_ENABLE_LOG_FINE) || defined(CCAPI_ENABLE_LOG_DEBUG) || defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_DETAIL(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->detail(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_DETAIL(message)
#endif
#if defined(CCAPI_ENABLE_LOG_FINE) || defined(CCAPI_ENABLE_LOG_DEBUG) || defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_FINE(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->fine(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_FINE(message)
#endif
#if defined(CCAPI_ENABLE_LOG_DEBUG) || defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_DEBUG(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->debug(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_DEBUG(message)
#endif
#if defined(CCAPI_ENABLE_LOG_TRACE)
#define CCAPI_LOGGER_TRACE(message) \
if (::ccapi::Logger::logger) { \
::ccapi::Logger::logger->trace(CCAPI_LOGGER_THREAD_ID, CCAPI_LOGGER_NOW, CCAPI_LOGGER_FILE_NAME, CCAPI_LOGGER_LINE_NUMBER, message); \
}
#else
#define CCAPI_LOGGER_TRACE(message)
#endif
#ifdef __GNUC__
#define __ccapi_cpp_func__ __PRETTY_FUNCTION__
#else
#define __ccapi_cpp_func__ __func__
#endif
#define CCAPI_LOGGER_FUNCTION_ENTER CCAPI_LOGGER_TRACE(std::string("enter ") + std::string(__ccapi_cpp_func__))
#define CCAPI_LOGGER_FUNCTION_EXIT CCAPI_LOGGER_TRACE(std::string("exit ") + std::string(__ccapi_cpp_func__))
#include <cstring>
#include <sstream>
#include <string>
#include <thread>
#include "ccapi_cpp/ccapi_macro.h"
#include "ccapi_cpp/ccapi_util_private.h"
namespace ccapi {
/**
* This class is used for library logging.
*/
class Logger {
public:
std::string LOG_SEVERITY_FATAL = "FATAL";
std::string LOG_SEVERITY_ERROR = "ERROR";
std::string LOG_SEVERITY_WARN = "WARN";
std::string LOG_SEVERITY_INFO = "INFO";
std::string LOG_SEVERITY_DETAIL = "DETAIL";
std::string LOG_SEVERITY_FINE = "FINE";
std::string LOG_SEVERITY_DEBUG = "DEBUG";
std::string LOG_SEVERITY_TRACE = "TRACE";
virtual ~Logger() {}
void fatal(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_FATAL, threadId, time, fileName, lineNumber, message);
}
void error(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_ERROR, threadId, time, fileName, lineNumber, message);
}
void warn(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_WARN, threadId, time, fileName, lineNumber, message);
}
void info(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_INFO, threadId, time, fileName, lineNumber, message);
}
void detail(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_DETAIL, threadId, time, fileName, lineNumber, message);
}
void fine(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_FINE, threadId, time, fileName, lineNumber, message);
}
void debug(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_DEBUG, threadId, time, fileName, lineNumber, message);
}
void trace(const std::thread::id& threadId, const std::chrono::system_clock::time_point& time, const std::string& fileName, const std::string& lineNumber,
const std::string& message) {
this->logMessagePrivate(LOG_SEVERITY_TRACE, threadId, time, fileName, lineNumber, message);
}
static Logger* logger;
virtual void logMessage(const std::string& severity, const std::string& threadId, const std::string& timeISO, const std::string& fileName,
const std::string& lineNumber, const std::string& message) {}
#ifndef CCAPI_EXPOSE_INTERNAL
protected:
#endif
void logMessagePrivate(const std::string& severity, const std::thread::id& threadId, const std::chrono::system_clock::time_point& time,
const std::string& fileName, const std::string& lineNumber, const std::string& message) {
std::stringstream ss;
ss << threadId;
this->logMessage(severity, ss.str(), UtilTime::getISOTimestamp(time), fileName, lineNumber, message);
}
};
} /* namespace ccapi */