""" Log wrapper """ import sys __all__ = [ 'log' ] LOG_DEBUG = 7 LOG_INFO = 6 LOG_NOTICE = 5 LOG_USER = 4 LOG_WARN = 3 LOG_ERR = 2 LOG_CRIT = 1 LOG_EMERG = 0 #--- # Internals #--- class _VxLogger(): def __init__(self, logfile=None): self._logfile = logfile self._level = LOG_USER self._indent = 0 #--- # Internals #--- def _print(self, level, text, skip_indent, fileno): if self._level < level: return 0 if not skip_indent and self._level == LOG_DEBUG and self._indent > 0: text = ('>>> ' * self._indent) + text print(text, file=fileno, end='', flush=True) return len(text) + 1 #--- # Public properties #--- @property def level(self): """ handle print level """ return self._level @level.setter def level(self, level): """ handle print level """ if level < LOG_EMERG or level > LOG_DEBUG: print(f"[log] level update to {level} is not possible, ignored") return self._level = level @property def indent(self): """ handle indentation level for LOG_DEBUG """ return self._indent @indent.setter def indent(self, indent): """ handle indentation level for LOG_DEBUG """ if indent < 0: print(f"[log] indent update to {indent} is not possible, ignored") return self._indent = indent #--- # Public methods #--- def debug(self, text, end='\n', skip_indent=False): """ print debug log """ return self._print(LOG_DEBUG, text + end, skip_indent, sys.stdout) def info(self, text, end='\n', skip_indent=False): """ print info log """ return self._print(LOG_INFO, text + end, skip_indent, sys.stdout) def notice(self, text, end='\n', skip_indent=False): """ print notice log """ return self._print(LOG_NOTICE, text + end, skip_indent, sys.stdout) def user(self, text, end='\n', skip_indent=False): """ print user log """ return self._print(LOG_USER, text + end, skip_indent, sys.stdout) def warn(self, text, end='\n', skip_indent=False): """ print warning log """ return self._print(LOG_WARN, text + end, skip_indent, sys.stderr) def error(self, text, end='\n', skip_indent=False): """ print error log """ return self._print(LOG_ERR, text + end, skip_indent, sys.stderr) def critical(self, text, end='\n', skip_indent=False): """ print critical log """ return self._print(LOG_CRIT, text + end, skip_indent, sys.stderr) def emergency(self, text, end='\n', skip_indent=False): """ print emergency log """ return self._print(LOG_EMERG, text + end, skip_indent, sys.stderr) #--- # Public functions #--- log = _VxLogger()