uncia/uncia/log.py
2020-10-10 23:47:08 -04:00

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()