"""Logging adapter.""" class ContentLambdaLogger: """Output standard logging structure from lambdas.""" def __init__(self, logger): """Initialize logger.""" self.logger = logger self.data = None def _initialize_data(self): """Initialize Data.""" self.data = { 'status': 'error', 'result': '', 'event_key': '', 'product_id': '', 'message': '', 'operation': '', 'queue_id': '' } def start(self, msk_message=None, event_key=None): """Begin processing.""" self._initialize_data() if msk_message is None: return self.data.update(event_key=event_key) if not msk_message.value: return self.logger.debug(msk_message.value) def end(self): """Log result.""" self.data.update(message=self.format_message()) if self.data['status'] == 'success': self.logger.info(self.data) elif self.data['status'] == 'skip': self.logger.warning(self.data) else: self.logger.error(self.data) def set_data(self, **kwargs): """Set logging data.""" self.data.update(kwargs) def format_message(self): """Format logging message.""" additional_data = [] if self.data['product_id']: additional_data.append(f'product_id={self.data["product_id"]}') if self.data['queue_id']: additional_data.append(f'queue_id={self.data["queue_id"]}') if self.data['result']: additional_data.append(f'result="{self.data["result"]}"') if self.data['event_key']: additional_data.append(f'event_key={self.data["event_key"]}') if not additional_data: return self.data['status'] return f'{self.data["status"]}: {" ".join(additional_data)}'