py.lib

Yohn Y. 2022-08-27 Parent:fe4a96d06243

41:483727ff89c4 Go to Latest

py.lib/log/slog_console.py

+ Возможность удалить cookie при формировании штатного ответа.

History
awgur@11 1 # coding: utf-8
awgur@11 2 """ Логирование на консоль
awgur@11 3
awgur@11 4 Метки в журнале о уровне сообщения:
awgur@11 5 "`": Debug
awgur@11 6 ".": Info
awgur@11 7 "*": Warning
awgur@11 8 "!": Error
awgur@11 9 "#": Alert
awgur@11 10 """
awgur@11 11
awgur@30 12 from time import monotonic
awgur@11 13 from datetime import timedelta
awgur@11 14 from sys import exc_info, stderr, stdout
awgur@11 15 from traceback import extract_tb, extract_stack
awgur@11 16
awgur@11 17
awgur@11 18 class Timing(object):
awgur@11 19 def __init__(self, name=None):
awgur@11 20 if name is None:
awgur@11 21 self.prefix = ''
awgur@11 22 else:
awgur@11 23 self.prefix = '%s :: ' % name
awgur@30 24 self.tsAll = monotonic()
awgur@11 25 self.ts = self.tsAll
awgur@11 26
awgur@11 27 def getTime(self):
awgur@30 28 return monotonic() - self.ts
awgur@11 29
awgur@11 30 def reset(self):
awgur@30 31 self.ts = monotonic()
awgur@11 32 self.tsAll = self.ts
awgur@11 33
awgur@11 34 def __str__(self):
awgur@30 35 ts = monotonic()
awgur@11 36 return self.prefix + '%s(%.4f)' % (timedelta(seconds=(ts - self.tsAll)), ts - self.ts)
awgur@11 37
awgur@11 38 def __call__(self, msg):
awgur@11 39 _buf = '%s | %s' % (self, msg)
awgur@30 40 self.ts = monotonic()
awgur@11 41 return _buf
awgur@11 42
awgur@11 43
awgur@11 44 class ConsoleLog(object):
awgur@11 45 def __init__(self, appname='main'):
awgur@11 46 self.appname = appname
awgur@11 47
awgur@11 48 @staticmethod
awgur@11 49 def _write(ItrCntnt):
awgur@11 50 for l in ItrCntnt:
awgur@11 51 print(l)
awgur@11 52
awgur@11 53 def __call__(self, msg):
awgur@11 54 self._write(map(
awgur@11 55 lambda x: '%3s | %s :: %s' % ('.', self.appname, x),
awgur@11 56 str(msg).splitlines()
awgur@11 57 ))
awgur@11 58
awgur@11 59 def err(self, msg):
awgur@11 60 self._write(map(
awgur@11 61 lambda x: '%3s | %s :: %s' % ('!', self.appname, x),
awgur@11 62 str(msg).splitlines()
awgur@11 63 ))
awgur@11 64
awgur@11 65 def warn(self, msg):
awgur@11 66 self._write(map(
awgur@11 67 lambda x: '%3s | %s :: %s' % ('*', self.appname, x),
awgur@11 68 str(msg).splitlines()
awgur@11 69 ))
awgur@11 70
awgur@11 71 def alert(self, msg):
awgur@11 72 self._write(map(
awgur@11 73 lambda x: '%3s | %s :: %s' % ('#', self.appname, x),
awgur@11 74 str(msg).splitlines()
awgur@11 75 ))
awgur@11 76
awgur@11 77 def debug(self, msg):
awgur@11 78 self._write(map(
awgur@11 79 lambda x: '%3s | %s :: %s' % ('`', self.appname, x),
awgur@11 80 str(msg).splitlines()
awgur@11 81 ))
awgur@11 82
awgur@11 83 @staticmethod
awgur@11 84 def getTiming(name=None):
awgur@11 85 return Timing(name)
awgur@11 86
awgur@11 87 def sublog(self, name):
awgur@11 88 return self.__class__('%s/%s' % (self.appname, name))
awgur@11 89
awgur@11 90 def excpt(self, msg, eClass=None, eObj=None, eTb=None, stack_skip=0):
awgur@11 91 if eClass is None:
awgur@11 92 eClass, eObj, eTb = exc_info()
awgur@11 93
awgur@11 94 tbData_tb = list(extract_tb(eTb))[::-1]
awgur@11 95 tbData_stack = list(extract_stack())[::-1][(2 + stack_skip):]
awgur@11 96 self.err(msg)
awgur@11 97 self.err('--- EXCEPTION ---')
awgur@11 98 self.err(' %s (%s)' % (eClass.__name__, eObj))
awgur@11 99 self.err('--- TRACEBACK ---')
awgur@11 100 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_tb:
awgur@11 101 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
awgur@11 102 self.err(' %s' % _tbText)
awgur@11 103 self.err('>>> Exception Handler <<<')
awgur@11 104 for _tbFile, _tbLine, _tbFunc, _tbText in tbData_stack:
awgur@11 105 self.err('File: %s, line %s in %s' % (_tbFile, _tbLine, _tbFunc))
awgur@11 106 self.err(' %s' % _tbText)
awgur@11 107 self.err('--- END EXCEPTION ---')
awgur@11 108
awgur@11 109
awgur@11 110 class StderrLog(ConsoleLog):
awgur@11 111 @staticmethod
awgur@11 112 def _write(msgItr):
awgur@11 113 for l in msgItr:
awgur@11 114 stderr.write('%s\n' % l)
awgur@11 115 stderr.flush()
awgur@11 116
awgur@11 117
awgur@11 118 class StdoutLog(ConsoleLog):
awgur@11 119 @staticmethod
awgur@11 120 def _write(msgItr):
awgur@11 121 for l in msgItr:
awgur@11 122 stdout.write('%s\n' % l)
awgur@11 123 stdout.flush()