Create a simple wrapper for python logging. Added fileHandler and graypy habdler. Facing an issue where messages sent to graylog client are multipied. For example message "Started app" is multipied 15times. Maybe it's duplicated for everyt log.info() I call? Not sure what would cause those message duplicates. Suspected that they duplicate for multiple CustomLogger instances. Cleared that in project, but that didn't help. Worth mentioning, process is taking about an hour. Maybe graylog looses connection, reconects and resent previous messages? Any help is appreciated. I am using python 3.7.3 and python3.8
import logging
import socket
import sys
from datetime import timedelta
import graypy
class CustomLogger:
def __init__(self, filename=None, use_graylog=True, **kwargs):
self.logger_fields = kwargs
self.filename = filename
self.use_graylog = use_graylog
self.root = self.format()
def format(self):
root_logger = logging.getLogger()
if len(root_logger.handlers) == 0:
root_logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(LOGGING_FORMATTER)
stream_handler = logging.StreamHandler(sys.stdout)
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
root_logger.addHandler(stream_handler)
if self.filename is not None:
file_handler = logging.FileHandler(filename=add_log_file_extension(self.filename))
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
root_logger.addHandler(file_handler)
if self.use_graylog:
root_logger.debug(f"Checking GRAYLOG server: '{str(GRAY_LOG_HOST)}'")
gray_log_handler = graypy.GELFUDPHandler(host=GRAY_LOG_HOST, port=int(GRAY_LOG_PORT))
root_logger.addHandler(gray_log_handler)
root_logger = logging.LoggerAdapter(root_logger, self.logger_fields)
root_logger.debug(
f"GRAYLOG server is up: '{str(GRAY_LOG_HOST)}' " f"for app: {self.logger_fields.get('app_name')}"
)
return root_logger
def info(self, message: str):
self.root.info(message)
logger = CustomLogger()
logger.info()