137 lines
2.5 KiB
Python
137 lines
2.5 KiB
Python
import sys
|
|
|
|
from os import environ as env
|
|
from datetime import datetime
|
|
|
|
from .Lib.IzzyLib import logging
|
|
|
|
|
|
# Custom logger
|
|
class Log():
|
|
def __init__(self, minimum='INFO', datefmt='%Y-%m-%d %H:%M:%S', date=True):
|
|
self.levels = {
|
|
'CRIT': 60,
|
|
'ERROR': 50,
|
|
'WARN': 40,
|
|
'INFO': 30,
|
|
'VERB': 20,
|
|
'DEBUG': 10,
|
|
'MERP': 0
|
|
}
|
|
|
|
self.datefmt = datefmt
|
|
self.minimum = self._lvlCheck(minimum)
|
|
|
|
# make sure the minimum logging level is an int
|
|
def _lvlCheck(self, level):
|
|
try:
|
|
value = int(level)
|
|
|
|
except ValueError:
|
|
value = self.levels.get(level)
|
|
|
|
if value not in self.levels.values():
|
|
raise InvalidLevel(f'Invalid logging level: {level}')
|
|
|
|
return value
|
|
|
|
def setLevel(self, level):
|
|
self.minimum = self._lvlCheck(level)
|
|
|
|
def log(self, level, msg):
|
|
levelNum = self._lvlCheck(level)
|
|
|
|
if type(level) == int:
|
|
for k,v in self.levels.items():
|
|
if v == levelNum:
|
|
level = k
|
|
|
|
if levelNum < self.minimum:
|
|
return
|
|
|
|
output = f'{level}: {msg}\n'
|
|
|
|
# Only show date when not running in systemd
|
|
if not env.get('INVOCATION_ID'):
|
|
date = datetime.now().strftime(self.datefmt)
|
|
output = f'{date} {output}'
|
|
|
|
stdout = sys.stdout
|
|
stdout.write(output)
|
|
stdout.flush()
|
|
|
|
|
|
def critical(self, msg):
|
|
self.log('CRIT', msg)
|
|
|
|
def error(self, msg):
|
|
self.log('ERROR', msg)
|
|
|
|
def warning(self, msg):
|
|
self.log('WARN', msg)
|
|
|
|
def info(self, msg):
|
|
self.log('INFO', msg)
|
|
|
|
def verbose(self, msg):
|
|
self.log('VERB', msg)
|
|
|
|
def debug(self, msg):
|
|
self.log('DEBUG', msg)
|
|
|
|
def merp(self, msg):
|
|
self.log('MERP', msg)
|
|
|
|
|
|
class InvalidType(Exception):
|
|
'''Raise when the log level isn't a str or an int'''
|
|
|
|
class InvalidLevel(Exception):
|
|
'''Raise when an invalid logging level was specified'''
|
|
|
|
|
|
# Set logger for sanic
|
|
LOG = dict(
|
|
version=1,
|
|
disable_existing_loggers=False,
|
|
loggers={
|
|
"sanic.root": {
|
|
"level": 'CRITICAL',
|
|
"handlers": ["console"],
|
|
"propagate": False,
|
|
},
|
|
|
|
"sanic.error": {
|
|
"level": "CRITICAL",
|
|
"handlers": ["error_console"],
|
|
"propagate": False,
|
|
"qualname": "sanic.error",
|
|
},
|
|
|
|
},
|
|
handlers={
|
|
"console": {
|
|
"class": "logging.StreamHandler",
|
|
'level': 'CRITICAL',
|
|
"formatter": "generic",
|
|
"stream": sys.stdout,
|
|
},
|
|
"error_console": {
|
|
"class": "logging.StreamHandler",
|
|
"formatter": "generic",
|
|
"stream": sys.stderr,
|
|
},
|
|
},
|
|
formatters={
|
|
"generic": {
|
|
"format": f"%(asctime)s %(process)d %(levelname)s %(message)s",
|
|
"datefmt": "%Y-%m-%d %H:%M:%S" if not env.get('INVOCATION_ID') else '',
|
|
"class": "logging.Formatter",
|
|
},
|
|
},
|
|
)
|
|
|
|
#logconf.dictConfig(LOG)
|
|
|
|
#logging = Log()
|