Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
AppenderConsole.cpp
Go to the documentation of this file.
1
/*
2
* This file is part of Project SkyFire https://www.projectskyfire.org.
3
* See LICENSE.md file for Copyright information
4
*/
5
6
#include "
AppenderConsole.h
"
7
#include "
Config.h
"
8
#include "
Util.h
"
9
10
#if PLATFORM == PLATFORM_WINDOWS
11
#include <Windows.h>
12
#endif
13
14
#include <sstream>
15
16
AppenderConsole::AppenderConsole
(
uint8
id
, std::string
const
&
name
,
LogLevel
level
,
AppenderFlags
flags
) :
17
Appender
(
id
,
name
,
AppenderType
::
APPENDER_CONSOLE
,
level
,
flags
),
_colored
(false)
18
{
19
for
(
uint8
i = 0; i <
MaxLogLevels
; ++i)
20
_colors
[i] =
ColorTypes
(
MaxColors
);
21
}
22
23
void
AppenderConsole::InitColors
(std::string
const
& str)
24
{
25
if
(str.empty())
26
{
27
_colored
=
false
;
28
return
;
29
}
30
31
int
color[
MaxLogLevels
];
32
33
std::istringstream ss(str);
34
35
for
(
uint8
i = 0; i <
MaxLogLevels
; ++i)
36
{
37
ss >> color[i];
38
39
if
(!ss)
40
return
;
41
42
if
(color[i] < 0 || color[i] >=
MaxColors
)
43
return
;
44
}
45
46
for
(
uint8
i = 0; i <
MaxLogLevels
; ++i)
47
_colors
[i] =
ColorTypes
(color[i]);
48
49
_colored
=
true
;
50
}
51
52
void
AppenderConsole::SetColor
(
bool
stdout_stream,
ColorTypes
color)
53
{
54
#if PLATFORM == PLATFORM_WINDOWS
55
static
WORD WinColorFG[
MaxColors
] =
56
{
57
0,
// BLACK
58
FOREGROUND_RED,
// RED
59
FOREGROUND_GREEN,
// GREEN
60
FOREGROUND_RED | FOREGROUND_GREEN,
// BROWN
61
FOREGROUND_BLUE,
// BLUE
62
FOREGROUND_RED | FOREGROUND_BLUE,
// MAGENTA
63
FOREGROUND_GREEN | FOREGROUND_BLUE,
// CYAN
64
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,
// WHITE
65
// YELLOW
66
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY,
67
// RED_BOLD
68
FOREGROUND_RED | FOREGROUND_INTENSITY,
69
// GREEN_BOLD
70
FOREGROUND_GREEN | FOREGROUND_INTENSITY,
71
FOREGROUND_BLUE | FOREGROUND_INTENSITY,
// BLUE_BOLD
72
// MAGENTA_BOLD
73
FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY,
74
// CYAN_BOLD
75
FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY,
76
// WHITE_BOLD
77
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY
78
};
79
80
HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);
81
SetConsoleTextAttribute(hConsole, WinColorFG[color]);
82
#else
83
enum
ANSITextAttr
84
{
85
TA_NORMAL = 0,
86
TA_BOLD = 1,
87
TA_BLINK = 5,
88
TA_REVERSE = 7
89
};
90
91
enum
ANSIFgTextAttr
92
{
93
FG_BLACK = 30,
94
FG_RED,
95
FG_GREEN,
96
FG_BROWN,
97
FG_BLUE,
98
FG_MAGENTA,
99
FG_CYAN,
100
FG_WHITE,
101
FG_YELLOW
102
};
103
104
enum
ANSIBgTextAttr
105
{
106
BG_BLACK = 40,
107
BG_RED,
108
BG_GREEN,
109
BG_BROWN,
110
BG_BLUE,
111
BG_MAGENTA,
112
BG_CYAN,
113
BG_WHITE
114
};
115
116
static
uint8
UnixColorFG[
MaxColors
] =
117
{
118
FG_BLACK,
// BLACK
119
FG_RED,
// RED
120
FG_GREEN,
// GREEN
121
FG_BROWN,
// BROWN
122
FG_BLUE,
// BLUE
123
FG_MAGENTA,
// MAGENTA
124
FG_CYAN,
// CYAN
125
FG_WHITE,
// WHITE
126
FG_YELLOW,
// YELLOW
127
FG_RED,
// LRED
128
FG_GREEN,
// LGREEN
129
FG_BLUE,
// LBLUE
130
FG_MAGENTA,
// LMAGENTA
131
FG_CYAN,
// LCYAN
132
FG_WHITE
// LWHITE
133
};
134
135
fprintf((stdout_stream ? stdout : stderr),
"\x1b[%d%sm"
, UnixColorFG[color], (color >=
YELLOW
&& color <
MaxColors
?
";1"
:
""
));
136
#endif
137
}
138
139
void
AppenderConsole::ResetColor
(
bool
stdout_stream)
140
{
141
#if PLATFORM == PLATFORM_WINDOWS
142
HANDLE hConsole = GetStdHandle(stdout_stream ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE);
143
SetConsoleTextAttribute(hConsole, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
144
#else
145
fprintf((stdout_stream ? stdout : stderr),
"\x1b[0m"
);
146
#endif
147
}
148
149
void
AppenderConsole::_write
(
LogMessage
const
& message)
150
{
151
bool
stdout_stream = !(message.
level
==
LogLevel::LOG_LEVEL_ERROR
|| message.
level
==
LogLevel::LOG_LEVEL_FATAL
);
152
153
if
(
_colored
)
154
{
155
uint8
index;
156
switch
(message.
level
)
157
{
158
case
LogLevel::LOG_LEVEL_TRACE
:
159
index = 5;
160
break
;
161
case
LogLevel::LOG_LEVEL_DEBUG
:
162
index = 4;
163
break
;
164
case
LogLevel::LOG_LEVEL_INFO
:
165
index = 3;
166
break
;
167
case
LogLevel::LOG_LEVEL_WARN
:
168
index = 2;
169
break
;
170
case
LogLevel::LOG_LEVEL_FATAL
:
171
index = 0;
172
break
;
173
case
LogLevel::LOG_LEVEL_ERROR
:
// No break on purpose
174
default
:
175
index = 1;
176
break
;
177
}
178
179
SetColor
(stdout_stream,
_colors
[index]);
180
utf8printf
(stdout_stream ? stdout : stderr,
"%s%s"
, message.
prefix
.c_str(), message.
text
.c_str());
181
ResetColor
(stdout_stream);
182
}
183
else
184
utf8printf
(stdout_stream ? stdout : stderr,
"%s%s"
, message.
prefix
.c_str(), message.
text
.c_str());
185
}
AppenderType
AppenderType
Definition
Appender.h:29
AppenderType::APPENDER_CONSOLE
@ APPENDER_CONSOLE
Definition
Appender.h:31
AppenderFlags
AppenderFlags
Definition
Appender.h:37
MaxLogLevels
const uint8 MaxLogLevels
Definition
Appender.h:26
LogLevel
LogLevel
Definition
Appender.h:16
LogLevel::LOG_LEVEL_TRACE
@ LOG_LEVEL_TRACE
Definition
Appender.h:18
LogLevel::LOG_LEVEL_WARN
@ LOG_LEVEL_WARN
Definition
Appender.h:21
LogLevel::LOG_LEVEL_ERROR
@ LOG_LEVEL_ERROR
Definition
Appender.h:22
LogLevel::LOG_LEVEL_INFO
@ LOG_LEVEL_INFO
Definition
Appender.h:20
LogLevel::LOG_LEVEL_FATAL
@ LOG_LEVEL_FATAL
Definition
Appender.h:23
LogLevel::LOG_LEVEL_DEBUG
@ LOG_LEVEL_DEBUG
Definition
Appender.h:19
AppenderConsole.h
ColorTypes
ColorTypes
Definition
AppenderConsole.h:13
YELLOW
@ YELLOW
Definition
AppenderConsole.h:22
MaxColors
const uint8 MaxColors
Definition
AppenderConsole.h:31
Config.h
uint8
std::uint8_t uint8
Definition
Define.h:79
utf8printf
void utf8printf(FILE *out, const char *str,...)
Definition
Util.cpp:489
Util.h
AppenderConsole::AppenderConsole
AppenderConsole(uint8 _id, std::string const &name, LogLevel level, AppenderFlags flags)
Definition
AppenderConsole.cpp:16
AppenderConsole::_colored
bool _colored
Definition
AppenderConsole.h:43
AppenderConsole::ResetColor
void ResetColor(bool stdout_stream)
Definition
AppenderConsole.cpp:139
AppenderConsole::_colors
ColorTypes _colors[MaxLogLevels]
Definition
AppenderConsole.h:44
AppenderConsole::_write
void _write(LogMessage const &message)
Definition
AppenderConsole.cpp:149
AppenderConsole::SetColor
void SetColor(bool stdout_stream, ColorTypes color)
Definition
AppenderConsole.cpp:52
AppenderConsole::InitColors
void InitColors(const std::string &init_str)
Definition
AppenderConsole.cpp:23
Appender::name
std::string name
Definition
Appender.h:89
Appender::id
uint8 id
Definition
Appender.h:88
Appender::level
LogLevel level
Definition
Appender.h:91
Appender::flags
AppenderFlags flags
Definition
Appender.h:92
Appender::Appender
Appender(uint8 _id, std::string const &name, AppenderType type=AppenderType::APPENDER_NONE, LogLevel level=LogLevel::LOG_LEVEL_DISABLED, AppenderFlags flags=APPENDER_FLAGS_NONE)
Definition
Appender.cpp:24
LogMessage
Definition
Appender.h:47
LogMessage::level
LogLevel level
Definition
Appender.h:55
LogMessage::text
std::string text
Definition
Appender.h:57
LogMessage::prefix
std::string prefix
Definition
Appender.h:58
src
server
shared
Logging
AppenderConsole.cpp
Generated on
for Project SkyFire Core by
1.17.0