from __future__ import print_function import syslog import sys import inspect from os.path import basename EMERG = syslog.LOG_EMERG ALERT = syslog.LOG_ALERT CRIT = syslog.LOG_CRIT ERR = syslog.LOG_ERR WARNING = syslog.LOG_WARNING NOTICE = syslog.LOG_NOTICE INFO = syslog.LOG_INFO DEBUG = syslog.LOG_DEBUG DEVEL = syslog.LOG_DEBUG + 1 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 = '' 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, file=file) def parse_log_prio_str(prio): # export try: r = int(prio) if r < 0 or r > DEVEL: raise Exeption("Invalid log priority ", prio) except ValueError: map_prio_str_to_val = { "EMERG" : EMERG, "emerg" : EMERG, "ALERT" : ALERT, "alert" : ALERT, "CRIT" : CRIT, "crit" : CRIT, "ERR" : ERR, "err" : ERR, "WARNING" : WARNING, "warning" : WARNING, "NOTICE" : NOTICE, "notice" : NOTICE, "INFO" : INFO, "info" : INFO, "DEBUG" : DEBUG, "debug" : DEBUG, "DEVEL" : DEVEL, "devel" : DEVEL, "OFF" : OFF, "off" : OFF, } if prio in map_prio_str_to_val: 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