mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-python
synced 2026-01-15 09:53:32 +01:00
Changes in Python 3 that made the code choke: o basestring is merged into str o print() needs parentesis o Class inheritance syntax changed o Abstract baseclass (ABCMeta) syntax changed o map.iteritems() is replaced by map.items() o Inconsistent use of tabs and spaces are no longer tolerated Signed-off-by: Jan Lindemann <jan@janware.com>
173 lines
4.1 KiB
Python
173 lines
4.1 KiB
Python
from __future__ import print_function
|
|
import syslog
|
|
import sys
|
|
import inspect
|
|
from os.path import basename
|
|
from . import misc
|
|
|
|
# --- python 2 / 3 compatibility stuff
|
|
try:
|
|
basestring
|
|
except NameError:
|
|
basestring = str
|
|
|
|
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 : '<Y>',
|
|
ALERT : '<A>',
|
|
CRIT : '<C>',
|
|
ERR : '<E>',
|
|
WARNING : '<W>',
|
|
NOTICE : '<N>',
|
|
INFO : '<I>',
|
|
DEBUG : '<D>',
|
|
DEVEL : '<V>',
|
|
}
|
|
|
|
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 get_caller_pos(up = 1):
|
|
assert(up == 1) # TODO: implement this
|
|
caller_frame = inspect.currentframe().f_back.f_back
|
|
return (basename(caller_frame.f_code.co_filename), caller_frame.f_lineno)
|
|
|
|
def slog(prio, *args, **kwargs): # 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:
|
|
if 'caller' in kwargs:
|
|
name, line = kwargs['caller']
|
|
else:
|
|
name, line = get_caller_pos(1)
|
|
msg += misc.pad(name, 20) + '[' + misc.pad(str(line), 4, True) + ']'
|
|
|
|
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
|
|
|