diff --git a/vcsserver/lib/logging_formatter.py b/vcsserver/lib/logging_formatter.py new file mode 100644 --- /dev/null +++ b/vcsserver/lib/logging_formatter.py @@ -0,0 +1,53 @@ +# Copyright (C) 2010-2023 RhodeCode GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License, version 3 +# (only), as published by the Free Software Foundation. +# +# 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 Affero General Public License +# along with this program. If not, see . +# +# This program is dual-licensed. If you wish to learn more about the +# RhodeCode Enterprise Edition, including its added features, Support services, +# and proprietary license terms, please see https://rhodecode.com/licenses/ + +import sys +import logging + + +BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = list(range(30, 38)) + +# Sequences +RESET_SEQ = "\033[0m" +COLOR_SEQ = "\033[0;%dm" +BOLD_SEQ = "\033[1m" + +COLORS = { + 'CRITICAL': MAGENTA, + 'ERROR': RED, + 'WARNING': CYAN, + 'INFO': GREEN, + 'DEBUG': BLUE, + 'SQL': YELLOW +} + + +class ColorFormatter(logging.Formatter): + + def format(self, record): + """ + Change record's levelname to use with COLORS enum + """ + def_record = super(ColorFormatter, self).format(record) + + levelname = record.levelname + start = COLOR_SEQ % (COLORS[levelname]) + end = RESET_SEQ + + colored_record = ''.join([start, def_record, end]) + return colored_record