DeathGarden_API_Rebirth/src/logic/logging_handler.py
2023-09-05 18:58:39 +02:00

66 lines
2.6 KiB
Python

import logging
import sys
import graypy
import json
import traceback
from colorlog import ColoredFormatter
class Logger:
def __init__(self):
self.my_logger = logging.getLogger('deathgarden_api')
self.dynamic_use_graylog = False
def setup_graylog(self, use_graylog, graylog_server):
self.dynamic_use_graylog = use_graylog
self.my_logger.setLevel(logging.DEBUG)
if self.dynamic_use_graylog:
handler = graypy.GELFUDPHandler(graylog_server, 12201)
self.my_logger.addHandler(handler)
else:
print("Graylog disabled. Not sending any Logs.")
self.graylog_logger(level="info", handler="logging_server_Event", message={"event": "api started"})
def graylog_logger(self, level, handler, message):
use_graylog = True
if use_graylog:
formatter = ColoredFormatter(
"%(log_color)s%(asctime)s %(levelname)-8s%(reset)s %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
reset=True,
log_colors={
'DEBUG': 'blue',
'INFO': 'white',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red,bg_white',
}
)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
console_handler.setFormatter(formatter)
self.my_logger.addHandler(console_handler)
log_methods = {"debug": self.my_logger.debug, "warning": self.my_logger.warning,
"error": self.my_logger.error, "info": self.my_logger.info,
"critical": self.my_logger.critical}
log_method = log_methods.get(level)
if log_method:
try:
message = json.dumps({"level": level, "handler": handler, "message": message})
except TypeError:
message = f"{{\"level\": \"{level}\", \"handler\": \"{handler}\", \"message\": \"{str(message)}\"}}"
if level == "error":
exc_type, exc_value, exc_traceback = sys.exc_info()
tb_str = traceback.format_exception(exc_type, exc_value, exc_traceback)
message = f"{message}\n{''.join(tb_str)}"
log_method(message)
else:
print("ERROR: No valid log level specified.")
self.my_logger.removeHandler(console_handler)
else:
print("Graylog disabled. Not sending any Logs.")
logger = Logger()