import logging import os import json import socket class JsonFormatter(logging.Formatter): def format(self, record): log_record = { 'timestamp': self.formatTime(record, self.datefmt), 'level': record.levelname, 'message': record.getMessage(), 'name': record.name, 'filename': record.filename, 'funcName': record.funcName, 'lineno': record.lineno, 'pathname': record.pathname, 'hostname': socket.gethostname() } # Merging additional fields from record if hasattr(record, 'extra'): log_record.update(record.extra) return json.dumps(log_record) def setup_logger(name): logger = logging.getLogger(name) logger.setLevel(os.getenv('LOG_LEVEL', logging.INFO)) # Console Handler console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) # Formatter formatter = JsonFormatter() console_handler.setFormatter(formatter) # Adding handler to the logger if not logger.hasHandlers(): logger.addHandler(console_handler) return logger