-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathlogger.py
More file actions
85 lines (66 loc) · 2.67 KB
/
logger.py
File metadata and controls
85 lines (66 loc) · 2.67 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
#!/usr/bin/env python3
##
## This file is part of OpenSIPS CLI
## (see https://github.com/OpenSIPS/opensips-cli).
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
"""
logger.py - implements coloured logging for the opensips-cli project
"""
import logging
#These are the sequences needed to get colored output
RESET_SEQ = "\033[0m"
COLOR_SEQ = "\033[1;%dm"
BOLD_SEQ = "\033[1m"
def formatter_message(message, use_color = True):
if use_color:
message = message.replace("$RESET", RESET_SEQ).replace("$BOLD", BOLD_SEQ)
else:
message = message.replace("$RESET", "").replace("$BOLD", "")
return message
# Custom logger class with multiple destinations
class ColoredLogger(logging.Logger):
BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
FORMAT = "$BOLD%(levelname)s$RESET: %(message)s"
COLOR_FORMAT = formatter_message(FORMAT, True)
def __init__(self, name):
logging.Logger.__init__(self, name)
color_formatter = ColoredFormatter(self.COLOR_FORMAT)
console = logging.StreamHandler()
console.setFormatter(color_formatter)
self.addHandler(console)
return
def color(self, color, message):
return COLOR_SEQ % (30 + color) + message + RESET_SEQ
class ColoredFormatter(logging.Formatter):
LEVELS_COLORS = {
'WARNING': ColoredLogger.YELLOW,
'INFO': ColoredLogger.MAGENTA,
'DEBUG': ColoredLogger.BLUE,
'CRITICAL': ColoredLogger.YELLOW,
'ERROR': ColoredLogger.RED
}
def __init__(self, msg, use_color = True):
logging.Formatter.__init__(self, msg)
self.use_color = use_color
def format(self, record):
levelname = record.levelname
if self.use_color and levelname in self.LEVELS_COLORS:
levelname_color = COLOR_SEQ % (30 + self.LEVELS_COLORS[levelname]) + levelname + RESET_SEQ
record.levelname = levelname_color
return logging.Formatter.format(self, record)
logging.setLoggerClass(ColoredLogger)
logger = logging.getLogger(__name__)
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4