From 4e3a6630da640b9f8fde9314d158dc8a8309ced6 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Wed, 25 Oct 2017 10:06:29 +0200 Subject: [PATCH] log.py: Add set_flags() Signed-off-by: Jan Lindemann --- tools/python/jwutils/Cmd.py | 2 + tools/python/jwutils/log.py | 114 ++++++++++++++++++++++++++++++++++-- 2 files changed, 112 insertions(+), 4 deletions(-) diff --git a/tools/python/jwutils/Cmd.py b/tools/python/jwutils/Cmd.py index 0cbfe98..70e7aa5 100644 --- a/tools/python/jwutils/Cmd.py +++ b/tools/python/jwutils/Cmd.py @@ -35,6 +35,7 @@ def run_sub_commands(description = '', prefix = 'Cmd'): # export parser = argparse.ArgumentParser(usage=os.path.basename(sys.argv[0]) + ' [command] [options]', formatter_class=argparse.ArgumentDefaultsHelpFormatter, description=description) parser.add_argument('--log-level', help='Log level', default='notice') + parser.add_argument('--log-flags', help='Log flags', default='stderr,position,prio,color') subparsers = parser.add_subparsers(title='Available commands', metavar='') for (name, cls) in classes: @@ -46,4 +47,5 @@ def run_sub_commands(description = '', prefix = 'Cmd'): # export args=parser.parse_args() log.set_level(args.log_level) + log.set_flags(args.log_flags) args.func(args) diff --git a/tools/python/jwutils/log.py b/tools/python/jwutils/log.py index 98bae71..83ee12d 100644 --- a/tools/python/jwutils/log.py +++ b/tools/python/jwutils/log.py @@ -1,4 +1,8 @@ +from __future__ import print_function import syslog +import sys +import inspect +from os.path import basename EMERG = syslog.LOG_EMERG ALERT = syslog.LOG_ALERT @@ -13,14 +17,97 @@ OFF = DEVEL + 1 level = NOTICE +CONSOLE_FONT_BOLD = '\033[1m' +CONSOLE_FONT_RED = '\033[31m' +CONSOLE_FONT_GREEN = '\033[32m' +CONSOLE_FONT_YELLOW = '\033[33m' +CONSOLE_FONT_BLUE = '\033[34m' + +CONSOLE_FONT_MAGENTA = '\033[35m' +CONSOLE_FONT_CYAN = '\033[36m' +CONSOLE_FONT_WHITE = '\033[37m' + +CONSOLE_FONT_BLINK = '\033[5m' +CONSOLE_FONT_OFF = '\033[m' + +f_position = 'position' +f_stderr = 'stderr' +f_stdout = 'stdout' +f_prio = 'prio' +f_color = 'color' +f_default = [ f_position, f_stderr, f_prio, f_color ] + +flags = set(f_default) + +short_prio_str = { + EMERG : '', + ALERT : '', + CRIT : '', + ERR : '', + WARNING : '', + NOTICE : '', + INFO : '', + DEBUG : '', + DEVEL : '', +} + +prio_colors = { + DEVEL : [ "", "" ], + DEBUG : [ "", "" ], + INFO : [ CONSOLE_FONT_BLUE, CONSOLE_FONT_OFF ], + NOTICE : [ CONSOLE_FONT_GREEN, CONSOLE_FONT_OFF ], + WARNING : [ CONSOLE_FONT_YELLOW, CONSOLE_FONT_OFF ], + ERR : [ CONSOLE_FONT_BOLD + CONSOLE_FONT_RED, CONSOLE_FONT_OFF ], + CRIT : [ CONSOLE_FONT_BOLD + CONSOLE_FONT_MAGENTA, CONSOLE_FONT_OFF ], + ALERT : [ CONSOLE_FONT_BOLD + CONSOLE_FONT_MAGENTA, CONSOLE_FONT_OFF ], + EMERG : [ CONSOLE_FONT_BOLD + CONSOLE_FONT_MAGENTA, CONSOLE_FONT_OFF ], +} + +def __pad(token, total_size, right_align = False): + add = total_size - len(token) + if add <= 0: + return token + space = ' ' * add + if right_align: + return space + token + return token + space + def slog(prio, *args): # export + if prio > level: return + msg = '' - for a in args: - msg += ' ' + str(a) + color_on = '' + color_off = '' + file = sys.stderr + + if f_prio in flags: + msg += short_prio_str[prio] + ' ' + + if f_position in flags: + caller_frame = inspect.currentframe().f_back + line = '[' + __pad(str(caller_frame.f_lineno), 4, True) + ']' + file = __pad(basename(caller_frame.f_code.co_filename), 20) + msg += file + line + + if f_color in flags: + color_on, color_off = prio_colors[prio] + + if len(args): + margs = '' + for a in args: + margs += ' ' + str(a) + msg += color_on + margs + color_off + + if f_stdout in flags: + file = sys.stdout + + if f_stderr in flags: + file = sys.stderr + if len(msg): - print msg[1:] + print(msg, file=file) def parse_log_prio_str(prio): # export try: @@ -54,10 +141,29 @@ def parse_log_prio_str(prio): # export return map_prio_str_to_val[prio] raise Exception("Unknown priority string \"", prio, "\"") - def set_level(level_): # export global level if isinstance(level_, basestring): level = parse_log_prio_str(level_) return level = level_ + +def set_flags(flags_): # export + global flags + flags = set(flags_.split(',')) + + #syslog + #console + #color + #prio + #position + #ide + #trace_rename_thread_to_shorter + #trace_rename_thread_to_longer + #trace_inout + #skip_openlog + #id + #date + #pid + #highlight_first_error +