mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-04-30 03:00:41 -04:00
feat(logging): Add data truncation to prevent oversized log entries
Co-authored-by: ntindle <8845353+ntindle@users.noreply.github.com>
This commit is contained in:
@@ -35,27 +35,43 @@ class TruncatedLogger:
|
||||
|
||||
def info(self, msg: str, **extra):
|
||||
msg = self._wrap(msg, **extra)
|
||||
self.logger.info(msg, extra=self._get_metadata(**extra))
|
||||
truncated_extra = self._truncate_large_data(extra)
|
||||
truncated_metadata = self._truncate_large_data(self.metadata)
|
||||
self.logger.info(
|
||||
msg, extra={"json_fields": {**truncated_metadata, **truncated_extra}}
|
||||
)
|
||||
|
||||
def warning(self, msg: str, **extra):
|
||||
msg = self._wrap(msg, **extra)
|
||||
self.logger.warning(msg, extra=self._get_metadata(**extra))
|
||||
truncated_extra = self._truncate_large_data(extra)
|
||||
truncated_metadata = self._truncate_large_data(self.metadata)
|
||||
self.logger.warning(
|
||||
msg, extra={"json_fields": {**truncated_metadata, **truncated_extra}}
|
||||
)
|
||||
|
||||
def error(self, msg: str, **extra):
|
||||
msg = self._wrap(msg, **extra)
|
||||
self.logger.error(msg, extra=self._get_metadata(**extra))
|
||||
truncated_extra = self._truncate_large_data(extra)
|
||||
truncated_metadata = self._truncate_large_data(self.metadata)
|
||||
self.logger.error(
|
||||
msg, extra={"json_fields": {**truncated_metadata, **truncated_extra}}
|
||||
)
|
||||
|
||||
def debug(self, msg: str, **extra):
|
||||
msg = self._wrap(msg, **extra)
|
||||
self.logger.debug(msg, extra=self._get_metadata(**extra))
|
||||
truncated_extra = self._truncate_large_data(extra)
|
||||
truncated_metadata = self._truncate_large_data(self.metadata)
|
||||
self.logger.debug(
|
||||
msg, extra={"json_fields": {**truncated_metadata, **truncated_extra}}
|
||||
)
|
||||
|
||||
def exception(self, msg: str, **extra):
|
||||
msg = self._wrap(msg, **extra)
|
||||
self.logger.exception(msg, extra=self._get_metadata(**extra))
|
||||
|
||||
def _get_metadata(self, **extra):
|
||||
metadata = {**self.metadata, **extra}
|
||||
return {"json_fields": metadata} if metadata else {}
|
||||
truncated_extra = self._truncate_large_data(extra)
|
||||
truncated_metadata = self._truncate_large_data(self.metadata)
|
||||
self.logger.exception(
|
||||
msg, extra={"json_fields": {**truncated_metadata, **truncated_extra}}
|
||||
)
|
||||
|
||||
def _wrap(self, msg: str, **extra):
|
||||
extra_msg = str(extra or "")
|
||||
@@ -64,6 +80,15 @@ class TruncatedLogger:
|
||||
text = text[: self.max_length] + "..."
|
||||
return text
|
||||
|
||||
def _truncate_large_data(self, data, max_size=10000):
|
||||
if isinstance(data, dict):
|
||||
return {k: self._truncate_large_data(v, max_size) for k, v in data.items()}
|
||||
elif isinstance(data, list):
|
||||
return [self._truncate_large_data(v, max_size) for v in data[:100]]
|
||||
elif isinstance(data, str) and len(data) > max_size:
|
||||
return data[:max_size] + "... [truncated]"
|
||||
return data
|
||||
|
||||
|
||||
class PrefixFilter(logging.Filter):
|
||||
def __init__(self, prefix: str):
|
||||
|
||||
Reference in New Issue
Block a user